【问题标题】:Kafka streams - Multiple topics as same source or one topic per source?Kafka 流 - 多个主题作为同一来源还是每个来源一个主题?
【发布时间】:2019-03-13 12:40:25
【问题描述】:

在构建 Kafka Streams 拓扑时,可以通过两种不同的方式对来自多个主题的读取进行建模:

  1. 读取具有相同源节点的所有主题。

topologyBuilder.addSource("sourceName", ..., "topic1", "topic2", "topic3");

  1. 使用单独的源节点读取每个主题。
topologyBuilder.addSource("sourceName1", ..., "topic1")
               .addSource("sourceName2", ..., "topic2")
               .addSource("sourceName3", ..., "topic3");

选项 1 相对于选项 2 是否有相对优势,反之亦然?所有主题都包含相同类型的数据,具有相同的数据处理逻辑。

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    鉴于,正如您所说,所有输入主题都包含相同类型的数据,并且数据的后续处理是等效的,您很可能应该选择选项 1,原因如下:

    1) 这将导致更小的拓扑

    2) 您只需将一个源节点连接到后续处理步骤

    如果以后需要对不同的源主题进行不同的处理,您可以将源节点拆分为多个。

    【讨论】:

      【解决方案2】:

      还有其他几个因素需要考虑。

      如果您的输入数据在输入主题之间均匀分布(按消息的大小和速率),那么请选择选项 1,因为它很简单。 如果不是,那么“慢”主题会减慢您的整体消费速度,因此要在“快”主题上实现更小的延迟,请选择选项 2。

      如果您在不同节点上并行运行多个此类拓扑(以实现高可用性或高吞吐量),那么拥有一个消费者组(选项 1)将导致更多消费者在其中进行协调。以我的经验,这也会减慢消费,尤其是当您重新启动消费者时(或者如果他们失败了)。在这种情况下,我也选择选项 2:组中的消费者越少,协调所需的精力越少,延迟越短。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2018-12-10
        • 2019-10-09
        • 2019-01-04
        • 2017-04-03
        • 1970-01-01
        相关资源
        最近更新 更多