4

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

假设我实现了一个kstreams应用程序,它正在使用来自一个主题的日志数据(或类似的数据),并愉快地开窗、聚合和生产到另一个主题。现在我想看看这个来自其他进程的键值数据。文档提示数据由RocksDB存储。我可以从“外部”读取这个作为对所述数据库的调用吗?或者这些数据是否仅作为虚拟构造提供给 kstreams 应用程序?

4

2 回答 2

6

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

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

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

关于窗口——取决于你的窗口是如何配置的,每个窗口段都会创建多个RocksDBStore被调用的s。Segment如上所述,您可以访问这些商店中的每一个。

于 2016-07-01T18:00:45.730 回答
5

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

此外,KTable为了容错,将状态写入 Kafka 主题。因此,您还可以使用此主题并将数据输入外部数据库。

于 2016-07-01T21:39:39.577 回答