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

问题描述 投票:0回答:2

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

这里有一些简单的问题:

  • 为什么 Apache Kafka Streams 使用 RocksDB?
  • 如何更改?

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

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

java-native-interface in-memory-database key-value-store rocksdb apache-kafka-streams
2个回答
38
投票

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
接口实现您自己的存储,并将其连接到拓扑中的处理器节点。


0
投票

看起来 RocksDB 也有 Java 变体:github

所以,我认为它是用 C++ 和 Java 编写的。

© www.soinside.com 2019 - 2024. All rights reserved.