为什么 Apache Kafka Streams 使用 RocksDB 以及如何改变它?

Why Apache Kafka Streams uses RocksDB and if how is it possible to change it?

在调查 Apache Kafka 0.9 和 0.10 的新功能期间, 我们用过 KStreams 和 KTables。有一个有趣的事实,Kafka 内部使用 RocksDB。 参见 Introducing Kafka Streams: Stream Processing Made Simple。 RocksDB 不是用 JVM 兼容语言编写的,因此需要小心处理部署,因为它需要额外的共享库(OS 依赖)。

还有一些简单的问题:

我曾尝试搜索答案,但我只看到隐含的原因,即 RocksDB 对于每秒大约数百万次操作范围内的操作非常快。

另一方面,我看到一些数据库在 Java 中编码,也许端到端它们可以这样做,而且它们不通过 JNI。

出于几个(内部)原因使用 RocksDB(正如您已经提到的,例如它的性能)。从概念上讲,Kafka Streams 不需要 RocksDB——它用作内部键值缓存,任何其他提供类似功能的存储也可以。

下面@miguno 的评论(改写):

One important advantage of RocksDB in contrast to pure in-memory key-value stores is its ability to write to disc. Thus, a state larger than available main memory can be supported by Kafka Streams.

以上来自@miguno 的评论:

FYI: "RocksDB is not written in JVM compatible language, so it needs careful handling of the deployment, as it needs extra shared library (OS dependent)." As a user of Kafka Streams you don't need to install anything.

使用 Kafka Streams DSL,从 0.10.2 版本 (KAFKA-3825) 开始,可以插入自定义状态存储并使用不同的键值存储.

使用 Kafka Streams Processor API,您可以通过 StateStore 接口实现自己的存储并将其连接到拓扑中的处理器节点。