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 主题以实现容错。因此,您也可以使用此主题并将数据输入外部数据库。
我今天早上一直在阅读有关 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 主题以实现容错。因此,您也可以使用此主题并将数据输入外部数据库。