What Zac said is correct. Some extra details:
1. Da Vinci consumes from Kafka (soon it could be from other non-Kafka pub subs) and writes the data to RocksDB. The end result is some SST files in the Da Vinci data directory, though those are fully managed by the library. Currently, we support 2 RocksDB formats: block-based (ideal for SSD+RAM) and PlainTable (ideal for all-in-RAM).
2. We recently saw an internal use case clocking in at 800K k/v consumed and written per second on a single node (it's fast). And we are continuously optimizing it further. Personally, I think we'll get to 1M writes/sec/node in the not too distant future. Blob-based transfer is on our radar but so far we've resisted adding extra moving parts as it didn't seem quite necessary. Still open to considering it in the future.
3. The JNI layer doesn't add too much penalty from my understanding, though I don't have concrete numbers in terms of the delta it adds. In absolute numbers, I've seen Da Vinci configured in the PlainTable format perform lookup + deserializarion in ~2 microseconds for a 10 KB payload. In the block-based format, on SSD, about 200 microseconds.