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

Sew*_*zki 17 java-native-interface in-memory-database key-value-store rocksdb apache-kafka-streams

在Apache Kafka 0.9和0.10的新功能调查期间,我们使用了KStreams和KTables.有一个有趣的事实是,Kafka在内部使用RocksDB.请参阅Kafka Streams简介:流处理变得简单.RocksDB不是用JVN兼容语言编写的,因此需要仔细处理部署,因为它需要额外的共享库(取决于操作系统).

这里有一些简单的问题:

  • 为什么Apache Kafka Streams使用RocksDB?
  • 怎么可能改变它?

我试图搜索答案,但我只看到隐含的原因,RocksDB在每秒大约数百万次操作范围内的操作非常快.

另一方面,我看到一些用Java编码的数据库,也许端到端他们可以做到这一点,而且他们不会通过JNI.

Mat*_*Sax 22

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

来自@miguno的评论(改述):

与纯内存中的键值存储相比,RocksDB的一个重要优势是它能够写入光盘.因此,Kafka Streams可以支持比可用主存储器大的状态.

来自@miguno的评论:

仅供参考:"RocksDB is not written in JVN compatible language, so it needs careful handling of the deployment, as it needs extra shared library (OS dependent)."作为Kafka Streams的用户,您无需安装任何东西.

使用Kafka Streams DSL,目前(v0.10.0.1)不能使用不同的键值存储.但是,未来版本将允许插入其他内容:https://issues.apache.org/jira/browse/KAFKA-3825

使用Kafka Streams Processor API,您可以通过StateStore接口实现自己的存储,并将其连接到拓扑中的处理器节点.即使这是更多的工作,它允许您解决当前的DSL限制.