【发布时间】:2017-12-19 10:18:27
【问题描述】:
我们计划在两台机器上运行 kafka 流应用程序。每个实例都将其 Ktable 数据存储在自己的机器上。 我们在这里面临的挑战是,
- 我们有一百万条记录推送到 Ktable。我们需要迭代 整个 Ktable (RocksDB) 数据并生成报告。
- 假设每个实例中存储了 50 万条记录。不可能通过 http 在单个 GET 中从其他实例获取所有记录 (除非有任何可用的流式 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
}
问题: 上述解决方案是否可以正常工作?如果没有,是否有任何替代解决方案?
请提出建议。提前致谢
【问题讨论】:
标签: apache-kafka apache-kafka-streams kafka-interactive-queries