Kafka Interactive Queries - 跨实例访问大数据
Kafka Interactive Queries - Accessing large data across instances
我们计划运行 kafka streams 应用分布在两台机器上。每个实例都将其 Ktable 数据存储在自己的机器上。
我们在这里面临的挑战是,
- 我们有一百万条记录被推送到 Ktable。我们需要迭代
整个 Ktable (RocksDB) 数据并生成报告。
- 假设每个实例中存储了 500K 条记录。不可能通过 http 在单个 GET 中从其他实例获取所有记录
(除非有任何可用的流式 TCP 技术)。基本上
我们在一次调用中需要两个实例数据并生成报告。
建议的解决方案:
我们正在考虑为这两个 instances.So 设置一个共享位置 (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
}
问题:
上述解决方案是否可以正常工作?如果没有,是否有其他解决方案?
求推荐。提前致谢
这行不通。即使您有一个共享的 state.dir
,每个实例也只加载自己的 share/shard 数据而不知道其他数据。
我认为您应该使用 GlobalKTable 获取数据的完整本地副本。
GlobalKTable 是最自然的首选,但这意味着定义全局 table 的每个节点都包含整个数据集。
想到的另一种选择确实是按需在节点之间流式传输数据。这很有意义,尤其是当创建报告的操作不频繁或数据集无法容纳单个节点时。基本上,您可以在此处按照文档指南查询远程 Kafka Streams 节点:
对于 RPC,使用支持流式传输的框架,例如akka-http.
服务器端流:
http://doc.akka.io/docs/akka-http/current/java/http/routing-dsl/source-streaming-support.html
正在使用流响应:
我们计划运行 kafka streams 应用分布在两台机器上。每个实例都将其 Ktable 数据存储在自己的机器上。 我们在这里面临的挑战是,
- 我们有一百万条记录被推送到 Ktable。我们需要迭代 整个 Ktable (RocksDB) 数据并生成报告。
- 假设每个实例中存储了 500K 条记录。不可能通过 http 在单个 GET 中从其他实例获取所有记录 (除非有任何可用的流式 TCP 技术)。基本上 我们在一次调用中需要两个实例数据并生成报告。
建议的解决方案: 我们正在考虑为这两个 instances.So 设置一个共享位置 (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
}
问题: 上述解决方案是否可以正常工作?如果没有,是否有其他解决方案?
求推荐。提前致谢
这行不通。即使您有一个共享的 state.dir
,每个实例也只加载自己的 share/shard 数据而不知道其他数据。
我认为您应该使用 GlobalKTable 获取数据的完整本地副本。
GlobalKTable 是最自然的首选,但这意味着定义全局 table 的每个节点都包含整个数据集。
想到的另一种选择确实是按需在节点之间流式传输数据。这很有意义,尤其是当创建报告的操作不频繁或数据集无法容纳单个节点时。基本上,您可以在此处按照文档指南查询远程 Kafka Streams 节点:
对于 RPC,使用支持流式传输的框架,例如akka-http.
服务器端流:
http://doc.akka.io/docs/akka-http/current/java/http/routing-dsl/source-streaming-support.html
正在使用流响应: