理解Kafka消费者在同一消费者群体中的再平衡性质,但有不同的订阅。

问题描述 投票:1回答:1

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

假设我们有三个kafka消费者。c1, c2c3. 他们订阅的专题 *_t1, *_t2*_t3 分别.现在,让我们把所有这些消费者放到同一个消费群体中,比如说 my-consumer. 在这种情况下,将 c2c3 参与再平衡,如果有新的主题加入,在 *_t1?

我看了一下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.)

所以,再平衡将发生为 c2c3 即使有新的消费者加入,他们都是订户。*_t1. 但我对第4点如何影响重新平衡有点不清楚。我想,对于主题的创建、删除、修改发生在 *_t1, c2c3 不会受到影响?是不是这样?

我知道我们可以在不同的消费者中拥有三个不同的消费者组,但我想知道这是否是必要的,或者是一个好的做法。

apache-kafka
1个回答
1
投票

所以,即使有新的消费者加入,他们订阅了*_t1,c2和c3也会发生重新平衡。

这是正确的。

但我对第4点如何影响再平衡有点不清楚。我想,对于发生在*_t1的主题创建删除修改,c2和c3不会受到影响?是不是这样?

只要 消费者 是在 同一消费群体,任何变化(比如消费者数量的变化,比如消费者c1停止订阅*_t1主题) 再平衡将发生,尽管c2和c3与*_t1无关。这对于topicspartitions数量的任何变化都是类似的。这是因为对于同一消费群中的所有消费者,Kafka希望确保所有的分区(对于所有订阅的主题)都被照顾到,即1个分区1个消费者。请注意,1个消费者可以消费多个分区,但不能反过来。

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

推荐的做法(是的,你是对的)就是把消费者放在同一个消费群中,因为他们订阅的是同一个主题。在您上面的案例中,会有3个消费者组,每个组都从各自的主题中消费。

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

因此,在我的消费者-1中发生的任何变化都不会对我的消费者-2和我的消费者-3组产生业绩影响。

为了便于后人理解,重新平衡的定义取自于 此处:

重新平衡是一组消费者实例(属于同一组)进行协调,以拥有该组所订阅的一套相互排斥的主题分区的过程。在一个消费者组的再平衡操作成功结束后,所有订阅主题的每个分区将由该组内的一个消费者实例拥有。再平衡的工作方式如下。每一个经纪人都会被选举为消费者组子集的协调人。组的协调人经纪人负责协调对消费者组成员变化或订阅主题的分区变化的再平衡操作。它还负责将由此产生的分区所有权配置传达给正在进行再平衡操作的组的所有消费者。

还有一些好消息,在Kafka 2.5中,可能会有一些 "性能" 改善 到再平衡的 "效果"。

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

© www.soinside.com 2019 - 2024. All rights reserved.