31

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

这里有一些简单的问题:

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

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

另一方面,我看到一些用 Java 编码的 DB,也许端到端它们可以做到这一点,而且它们不会通过 JNI。

4

1 回答 1

34

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

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

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

来自上面@miguno 的评论:

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

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

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

于 2016-10-18T16:59:14.550 回答