【问题标题】:Can single consumer read from multiple partitions of a kafka topic?单个消费者可以从 kafka 主题的多个分区中读取吗?
【发布时间】:2021-11-28 19:52:37
【问题描述】:

有一个kafka topic有16个partition

使用给定的消费者组名称,我们目前正在启动单个消费者来读取主题。


  1. 单个消费者是否阅读该主题的partition 0(only)? 如果partition 0 的消息为空,消费者是否开始从下一个分区读取(partiton 1... 等等)?

  2. 我们可以选择启动多个消费者(具有相同的消费者组名称)来读取同一主题(具有 16 个分区)。可以维护多少个消费者,以并行读取多个分区?

【问题讨论】:

    标签: apache-kafka kafka-topic


    【解决方案1】:

    你有一个包含 16 个分区的主题

    使用给定的消费者组名称,您当前正在启动单个消费者以读取主题 这个单一消费者将从所有分区中读取数据。

    因为您可以启动多个消费者(在同一个消费者组内)。

    对于 16 个分区,您最多应该有 16 个消费者监听每个分区。在消费者组中的 Kafka 中,每个分区最多可以有 1 个消费者。

    【讨论】:

      【解决方案2】:

      组中的消费者通过确定每个分区仅由组中的单个消费者使用,在他们之间尽可能公平地划分主题分区。当消费者数量少于分区时,相同的消费者会从多个分区中读取消息。

      在您的场景中,单个消费者将从您的所有分区中读取数据。这种类型的消费者被称为独家消费者。当消费者组只有一个消费者时,就会发生这种情况。这样的消费者必须连接到它需要的所有分区。

      理想情况下,分区的数量应该等于消费者的数量。如果消费者数量更多,多余的消费者就会闲置,浪费客户资源。如果分区的数量更多,一些消费者会从多个分区读取,这应该不是问题,除非消息的顺序很重要。

      订购

      Kafka 不保证分区之间消息的顺序。它确实提供了分区内的排序。因此,如果消费者只订阅了一个分区,Kafka 可以为消费者维护消息排序。

      如果您的用例中需要消息排序,则应使用处理期间分组依据的键对消息进行排序。

      【讨论】:

        猜你喜欢
        • 2022-06-13
        • 1970-01-01
        • 2016-06-04
        • 2020-05-03
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-04
        相关资源
        最近更新 更多