【问题标题】:If you have less consumers than partitions, what happens?如果消费者比分区少,会发生什么?
【发布时间】:2017-04-15 05:28:50
【问题描述】:

如果你的消费者少于分区,这是否仅仅意味着你不会消费给定主题的所有消息?

在云环境中,您打算如何跟踪正在运行的消费者数量以及指向给定主题#partition 的消费者数量?

如果您在给定主题#partition 上有多个消费者怎么办?我猜消费者必须以某种方式跟踪它已经处理了哪些消息,以防出现重复?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    其实每个消费者都属于一个consumer group。当 Kafka 集群向一个消费者组发送数据时,一个分区的所有记录都会发送给该组中的单个消费者。

    如果组中的分区数多于消费者,则一些消费者将使用来自多个分区的数据。如果组中的消费者多于分区,则某些消费者将无法获得数据。如果您向组中添加新的消费者实例,它们将接管旧成员的一些分区。如果您从组中删除消费者(或消费者死亡),则其分区将重新分配给其他成员。

    现在让我们来看看你的问题:

    如果你的消费者少于分区,这是否仅仅意味着你不会消费给定主题的所有消息?

    没有。同一消费者组中的一些消费者会消费来自多个分区的数据。

    在云环境中,您打算如何跟踪正在运行的消费者数量以及指向给定主题#partition 的消费者数量?

    卡夫卡会照顾好它。如果新消费者加入群组,或者老消费者死亡,Kafka 会做 reblance。

    如果给定主题#partition 上有多个消费者怎么办?

    您不能有多个消费者(在一个消费者组中)来使用来自单个分区的数据。但是,如果有多个消费者组,则每个消费者组中的一个(并且只有一个)消费者可以消费同一个分区。

    【讨论】:

      【解决方案2】:

      1) 不,这意味着您将让一个消费者处理多个消费者。 2) Kafka 从不将同一个分区分配给多个消费者,因为这将违反分区内的顺序保证。 3) 您可以在客户端代码中实现 ConsumerRebalanceListener,每当从消费者那里分配或撤销分区时都会调用该代码。

      您可能希望专门查看这篇文章的“将分区分配给消费者”部分。在那我有一个示例,您在其中创建具有 3 个分区的主题,然后使用 ConsumerRebalanceListener 的消费者告诉您哪个消费者正在处理哪个分区。现在你可以通过启动 1 个或多个消费者来玩弄它,看看会发生什么。示例代码在github中

      http://www.javaworld.com/article/3066873/big-data/big-data-messaging-with-kafka-part-2.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-05
        • 2017-10-30
        • 1970-01-01
        • 2019-03-26
        • 2019-08-27
        • 2016-07-23
        • 2020-08-24
        相关资源
        最近更新 更多