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

Posted

技术标签:

【中文标题】了解同一消费者组内但订阅不同的 Kafka 消费者再平衡的性质【英文标题】:Understanding the nature of Kafka Consumer Rebalance within same consumer-group but with different subscriptions 【发布时间】:2017-12-08 01:06:27 【问题描述】:

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

假设我们有三个 kafka 消费者 c1c2c3。他们分别订阅主题*_t1*_t2*_t3。 现在,让我们将所有这些消费者放到同一个消费者组中,比如my-consumer。在这种情况下,c2c3 是否会参与重新平衡,如果在 *_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.)

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

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

【问题讨论】:

希望这有帮助 - community.hortonworks.com/questions/131337/… 【参考方案1】:

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

没错。

但我对第 4 点的看法有点粗略 影响再平衡。我认为,对于主题创建/删除/更改 *_t1、c2 和 c3 中发生的事情不会受到影响吗?不是这样吗?

只要消费者同一个消费者组中,任何变化(比如消费者数量的变化,例如消费者c1订阅*_t1主题都会停止) 会发生重新平衡,即使 c2 和 c3 与 *_t1 无关。这对于主题/分区数量的任何变化都是类似的。这是因为对于同一消费者组中的所有消费者,Kafka 希望确保所有分区(对于所有订阅的主题)都得到处理,即 1 个分区 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 并允许 用户完成正在进行的重新平衡,然后重新尝试提交 那些仍然拥有的分区的偏移量。

【讨论】:

以上是关于了解同一消费者组内但订阅不同的 Kafka 消费者再平衡的性质的主要内容,如果未能解决你的问题,请参考以下文章

Kafka核心技术与实战——15 | 消费者组到底是什么?

Kafka如何进行分区分配

Kafka笔记整理:消费形式验证与性能测试

kafka——消费者原理解析

Kafka下的生产消费者模式与订阅发布模式

怒肝15天终于将Kafka的重平衡一举拿下