繁体   English   中英

了解同一消费者组内但订阅不同的 Kafka 消费者重新平衡的性质

[英]Understanding the nature of Kafka Consumer Rebalance within same consumer-group but with different subscriptions

我需要就重新平衡如何影响同一组中的消费者但订阅 Kafka 中不同主题正则表达式的消费者进行一些说明 [0.10.1]

假设我们有三个 kafka 消费者c1c2c3 他们分别订阅主题*_t1*_t2*_t3 现在,让我们将所有这些消费者放在同一个消费者组中,比如my-consumer 在这种情况下,如果在*_t1中添加新主题, c2c3是否会参与重新平衡?

我在这里浏览了 kafka 文档并找到了一些相关信息。 第 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.)

因此,即使新消费者加入订阅*_t1 ,也会对c2c3进行重新平衡。 但我对第 4 点如何影响重新平衡并不了解。 我认为,对于*_t1发生的主题创建/删除/更改, c2c3不会受到影响? 不是这样吗?

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

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

没错。

但我对第 4 点如何影响重新平衡并不了解。 我认为,对于 *_t1、c2 和 c3 中发生的主题创建/删除/更改不会受到影响? 不是这样吗?

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

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

推荐的做法(是的,你是对的)是将消费者放在他们订阅相同主题的同一个消费者组 IFF 中。 在上面的例子中,将有 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 的性能产生影响。

对于后代, 这里采用的再平衡定义:

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

还有一些好消息,在 Kafka 2.5 中,重新平衡的“效果”可能会有一些“性能”改进

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM