了解同一消费者群体中卡夫卡消费者重新平衡的性质,但订阅量不同

时间:2017-12-08 01:06:27

标签: apache-kafka

我需要澄清一些关于重新平衡如何影响同一组中的消费者,但是谁在Kafka订阅不同的主题正则表达式[0.10.1]

假设我们有三位卡夫卡消费者c1c2c3。他们分别订阅了主题*_t1*_t2*_t3。 现在,让我们将所有这些消费者放在同一个消费者群体中,比如my-consumer。在这种情况下,如果c2中添加了新主题,c3*_t1会参与重新平衡吗?

我浏览了kafka文档here并找到了一些相关信息。第2点明确表示消费者:

Register a watch on changes (new consumers joining or any existing consumers leaving) under the consumer id registry. (Each change triggers rebalancing among all consumers within the group to which the changed consumer belongs.)

因此,即使新订阅者加入了订阅c2的用户,也会对c3*_t1进行重新平衡。但我对于#4点如何影响重新平衡有点粗略。我认为,对于*_t1中发生的主题创建/删除/更改,c2c3不会受到影响?不是这样吗?

据我所知,我们可以在消费者中设置三个不同的消费者群体,但我试图了解这是否是必要的和/或良好的做法。

1 个答案:

答案 0 :(得分:1)

因此,即使新的消费者加入,c2和c3也会发生重新平衡 谁正在订阅* _t1。

是的。

但是我对#4点略有粗略 影响重新平衡。我认为,对于主题创建/删除/更改 * _t1中发生的情况,c2和c3不会受到影响?不是吗?

只要消费者属于同一消费者组,任何更改(例如,消费者数量的变化,例如订阅* _t1主题的消费者c1都将停止)即使c2和c3与* _t1无关,也会发生重新平衡。对于主题/分区数量的任何更改,这都是相似的。这是因为对于同一消费者组中的所有消费者,Kafka希望确保所有分区(针对所有订阅的主题)都得到照顾,即1个分区1消费者。 请注意,一个使用者可以使用1个以上的分区,反之亦然。

我了解我们可以在三个不同的消费群体之间 消费者,但我试图了解是否有必要和/或 好的做法。

推荐的做法(是的,您是对的)是将消费者归入他们订阅相同主题的同一个消费者组。在上述情况下,将有3个消费群体,每个消费群体都来自各自的主题。

消费组my-consumer-1,其中c1消费* _t1
消费组my-consumer-2,其中c2消费* _t2
消费者组my-consumer-3,其中c3消费* _t3

my-consumer-1中发生的任何更改都不会对组my-consumer-2和my-consumer-3产生性能影响。

对于后代,重新平衡的定义采用here

重新平衡是一组消费者实例的过程 (属于同一组)协调拥有互斥的 该组已订阅的主题分区集。消费方组成功进行重新平衡操作结束时,所有已订阅主题的每个分区将归该组内的单个消费方实例所有。重新平衡的工作方式如下。每个经纪人都被选为一部分消费者群体的协调员。一个组的协调代理人负责协调有关消费者组成员身份更改或订阅主题的分区更改的重新平衡操作。它还负责将由此产生的分区所有权配置传达给正在进行重新平衡操作的组的所有使用者。

还有一些好消息,在Kafka 2.5中,重新平衡的“效果”可能有一些“表现” improvement

使用RebalanceProtocol#COOPERATIVE时,Consumer#poll仍然可以 在那些处于平衡状态时返回数据 消费者仍然拥有的分区;此外 Consumer#commitSync现在可能会抛出致命错误 RebalanceInProgressException以在此类事件中通知用户 为了区别致命的CommitFailedException并允许 用户完成正在进行的重新平衡,然后重新尝试提交 那些仍然拥有的分区的偏移量。