【问题标题】:kafka ktable - rocksdb access via javakafka ktable - 通过java访问rocksdb
【发布时间】:2016-07-01 14:23:30
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

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

然后你可以get()put()remove()。您可以配置 KafkaStreams 存储 RocksDB 状态的位置,这样基本上就可以在 KafkaStreams 之外使用存储了。

关于窗口——根据窗口的配置方式,每个窗口段都会创建多个称为Segments 的RocksDBStore。如上所述,您可以访问这些商店中的每一个。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这似乎与其他答案冲突。
    • 好吧。并不真地。另一个答案描述了需要一些额外内部知识的手工制作(即非内置)解决方案。顺便说一句:强烈建议只从 RocksDB 获取()数据。放置或删除可能会弄乱您的内部操作员状态。
    • 谢谢我不知道 KIP-67
    • @MatthiasJ.Sax 这很有趣。我正在开发一个项目,该项目通过按键向目标分区发送查询来查询分布式本地状态。这样,我基本上就有了一个分片数据库,其中分片是通过 Kafka 主题分区和键控本地状态实现的。我正在使用DSL,但基本上只有#transform(),所以只比#addProcessor()#process()高出一步。 KIP-67 似乎更针对因使用 DSL 的更复杂元素而导致的不透明度?
    • 是的。如果您使用 DSL,一些状态存储会自动创建,但对用户隐藏。 KIP-67 旨在使这些商店可供用户使用。但对于用户手动创建存储的处理器 API,KIP-67 将改进对存储的查询,因为“发现服务”和简单易用的查询 API(隐藏所有嘈杂的 RocksDB 详细信息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多