跨示例访问大型数据

ubof19bj  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(337)

我们计划在两台机器上运行kafka streams应用程序。每个示例将其ktable数据存储在自己的机器上。我们面临的挑战是,
我们有一百万张唱片被推到了ktable。我们需要迭代整个ktable(rocksdb)数据并生成报告。
假设每个示例中存储了500k条记录。不可能在一个get over http中从其他示例获取所有记录(除非有任何流式tcp技术可用)。基本上,我们需要在一个调用中使用两个示例数据并生成报告。
建议的解决方案:我们正在考虑为这两个示例提供一个共享位置(state.dir),这样这两个示例就可以将ktable数据存储在同一个目录中,其思想是只调用,

final ReadOnlyKeyValueStore<Key, Result> allDataFromTwoInstance =
        streams.store("result",
            QueryableStoreTypes.<Key, Result>keyValueStore())

    KeyValueIterator<Key, ReconResult> iterator = allDataFromTwoInstance.all();
    while (iterator.hasNext()) {
       //append to excel report
    }

问题:上述解决方案是否能解决任何问题?如果没有,是否有其他解决方案?
请建议。提前谢谢

xmakbtuz

xmakbtuz1#

globalktable是最自然的首选,但它意味着定义全局表的每个节点都包含整个数据集。
想到的另一种方法是按需在节点之间传输数据。这很有意义,尤其是在创建报表的操作不频繁或数据集无法容纳单个节点时。基本上,您可以按照文档指南在此处查询远程kafka streams节点:
http://kafka.apache.org/0110/documentation/streams/developer-guide#streams_developer-交互式查询指南
对于rpc,使用支持流的框架,例如akkahttp。
服务器端流媒体:
http://doc.akka.io/docs/akka-http/current/java/http/routing-dsl/source-streaming-support.html
使用流式响应:
http://doc.akka.io/docs/akka-http/current/java/http/implications-of-streaming-http-entity.html#client-流式http实体的侧面处理

46scxncf

46scxncf2#

这行不通。即使你有一个共同的 state.dir ,每个示例只加载自己的数据共享/碎片,而不知道其他数据。
我认为您应该使用globalktable来获取数据的完整本地副本。

相关问题