提问者:小点点

为什么Apache Kafka Streams使用RocksDB,如果如何更改它?


在对Apache Kafka 0.9和0.10中的新特性进行调查期间,我们使用了KStreams和KTables。Kafka内部使用RocksDB是一个有趣的事实。请参阅介绍Kafka Streams:使流处理变得简单。RocksDB不是用JVM兼容的语言编写的,因此它需要仔细处理部署,因为它需要额外的共享库(OS依赖)。

这里有一些简单的问题:

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

我试图搜索答案,但我只看到隐含的原因,RocksDB对于每秒大约数百万次操作的操作来说非常快。

另一方面,我看到一些用Java编码的数据库,也许端到端它们可以做到这一点,因为它们没有JNI。


共1个答案

匿名用户

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

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

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

上面@miguno的评论:

FYI:"RocksDB不是用JVM兼容的语言编写的,所以它需要仔细处理部署,因为它需要额外的共享库(OS依赖)。"作为Kafka Streams的用户,你不需要安装任何东西。

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

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