Apache kafka Kafka交互式查询-跨实例访问大型数据

Apache kafka Kafka交互式查询-跨实例访问大型数据,apache-kafka,apache-kafka-streams,kafka-interactive-queries,Apache Kafka,Apache Kafka Streams,Kafka Interactive Queries,我们计划在两台机器上运行kafka streams应用程序。每个实例在其自己的计算机上存储其Ktable数据。 我们面临的挑战是 我们有一百万张唱片被推到了Ktable上。我们需要迭代 整个Ktable(RocksDB)数据并生成报告 假设每个实例中存储了500K条记录。不可能在一个get-over http中从其他实例获取所有记录 (除非有任何流式TCP技术可用)。基本上 我们需要在一个调用中使用两个实例数据并生成报告 提议的解决办法: 我们正在考虑为这两个实例提供一个共享位置(state.d

我们计划在两台机器上运行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
        }
    
    final ReadOnlyKeyValueStore allDataFromTwoInstance=
    streams.store(“结果”,
    QueryableStoreTypes.keyValueStore())
    KeyValueIterator迭代器=allDataFromTwoInstance.all();
    while(iterator.hasNext()){
    //附加到excel报表
    }
    
    问题: 上述解决方案是否可以正常工作?如果没有,是否有其他解决方案


    请建议。提前感谢

    这行不通。即使您有一个共享的
    state.dir
    ,每个实例也只加载自己的数据共享/碎片,而不知道其他数据


    我认为您应该使用获取数据的完整本地副本。

    这不起作用。即使您有一个共享的
    state.dir
    ,每个实例也只加载自己的数据共享/碎片,而不知道其他数据


    我认为您应该使用获取数据的完整本地副本。

    GlobalKTable是最自然的首选,但它意味着定义全局表的每个节点都包含整个数据集

    我想到的另一个替代方案实际上是按需在节点之间传输数据。这很有意义,尤其是当创建报告是一项不常见的操作或数据集无法容纳单个节点时。基本上,您可以按照文档指南在此处查询远程Kafka Streams节点:

    对于RPC,使用支持流的框架,例如akka http

    服务器端流:

    使用流式响应:


    GlobalKTable是最自然的首选,但它意味着定义全局表的每个节点都包含整个数据集

    我想到的另一个替代方案实际上是按需在节点之间传输数据。这很有意义,尤其是当创建报告是一项不常见的操作或数据集无法容纳单个节点时。基本上,您可以按照文档指南在此处查询远程Kafka Streams节点:

    对于RPC,使用支持流的框架,例如akka http

    服务器端流:

    使用流式响应: