kafka ktable - 通过java访问rocksdb

eth*_*nny 3 java apache-kafka apache-kafka-streams

我今天早上一直在阅读ktables,希望实现一个滚动窗口的键值存储.我可以看到最新版本的kafka似乎暗示这是可能的,但我更想知道从"外部"应用程序访问键值数据.

假设我实现了一个kstreams应用程序,它正在从一个主题中消耗日志数据(或它的同类),并快乐地窗口化,聚合和生成另一个主题.现在我想从其他一些过程中查看这个键值数据.文档暗示数据由rocksdb存储.我可以从"外部"读取这个作为对所述数据库的调用吗?或者这些数据仅作为kstreams应用程序的虚拟构造提供?

Dmi*_*sky 5

RocksDBStore展示了如何从Java访问RocksDB商店.基本上:

RocksDB db = RocksDB.open(options, dir.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)

然后你就可以get()put()remove().您可以配置KafkaStreams存储RocksDB状态的位置,因此基本上您需要知道在KafkaStreams之外使用商店.

关于窗口 - 取决于窗口的配置方式,每个窗口段都会创建多个RocksDBStore被调用Segment的窗口.您可以访问上述每个商店.


Mat*_*Sax 5

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

此外,KTable状态被写入Kafka主题以容错.因此,您还可以使用此主题并将数据提供给外部数据库.

  • 好。并不真地。另一个答案描述了一种手工制作(即非内置)的解决方案,它需要一些额外的内部知识。顺便说一句:强烈建议只从 RocksDB 中获取()数据。Put 或 remove 可能会弄乱您的内部操作员状态。 (2认同)