kafka ktable - 通过java访问rocksdb

时间:2016-07-01 14:23:30

标签: java apache-kafka apache-kafka-streams

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

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

2 个答案:

答案 0 :(得分:5)

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

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

然后您可以get()put()以及remove()。您可以配置KafkaStreams存储RocksDB状态的位置,以便您在KafkaStreams之外使用商店时基本上只需知道。

关于窗口 - 取决于窗口的配置方式,每个窗口段创建多个名为SegmentRocksDBStore。您可以访问上述每个商店。

答案 1 :(得分:5)

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

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