kafka ktable - 通过 java 访问 rocksdb

kafka ktable - rocksdb access via java

我今天早上一直在阅读有关 ktables 的内容,希望实现滚动式 window 键值存储。我可以看到最新版本的 kafka 似乎暗示这是可能的,但我更想知道如何从 'outside' 应用程序访问键值数据。

假设我实现了一个 kstreams application and it's consuming log data (or it's ilk) from a topic and merrily windowing, aggregating and producing to another topic. Now I want to look at this key-value data from some other process. The docs hint that the data is stored by rocksdb。我可以从 'outside' 读取这个作为对所述数据库的调用吗?还是此数据仅可用作 kstreams 应用程序的虚拟构造?

RocksDBStore 展示了如何从 Java 访问 RocksDB 存储。基本上:

RocksDB db = RocksDB.open(options, dir.getAbsolutePath());

然后你可以 get()put()remove()。您可以配置 KafkaStreams 存储 RocksDB 状态的位置,因此这基本上就是您在 KafkaStreams 之外使用存储区所需知道的全部内容。

关于 windows——根据您的 windowing 的配置方式,创建多个 RocksDBStore 称为 Segment 的每个 window 段.您可以按上述方式访问这些商店中的每一个。

目前,没有内置支持,但计划公开内部状态(即 KTable 状态)并使其可查询。有关详细信息,请参阅 KIP-67

此外,KTable 状态被写入 Kafka 主题以实现容错。因此,您也可以使用此主题并将数据输入外部数据库。