0

我在消费者组 G1 中有一个消费者 C1,它正在从主题 T1 读取(进行轮询),并且在此轮询之间,有加入同一组 G1 中的另一个消费者 C2,但订阅了不同的主题 T2。
我观察到的是,主题 T1 的分区被撤销并重新分配给同一个消费者 C1,这是预期的,因为该主题没有其他消费者。但我的问题是,当其他消费者订阅了不同的主题时,为什么会首先发生撤销?

这些是来自消费者 C1 的日志打印。在同一时刻,有一个消费者 C2 加入并订阅了主题 T2 :

Revoking previously assigned partitions [T1-1, T1-0]
20/05/28 03:19:04 INFO internals.AbstractCoordinator: [Consumer clientId=consumer-171, groupId=G1] (Re-)joining group
20/05/28 03:19:04 INFO internals.AbstractCoordinator: [Consumer clientId=consumer-171, groupId=G1] Successfully joined group with generation 1117184
20/05/28 03:19:04 INFO internals.ConsumerCoordinator: [Consumer clientId=consumer-171, groupId=G1] Setting newly assigned partitions [T1-1, T1-0]
 
4

1 回答 1

1

当一个新的消费者 (C2) 被添加到消费者组时,现有消费者 (C1) 无法确定是否需要撤销。这是因为 C1 不知道 C2 订阅的主题。

因此,所有现有消费者的所有分区都被撤销。其中一个代理充当协调者,它在后台运行其逻辑以提出有效的分配,然后将其传达给消费者组的消费者。您可以在此处阅读更多相关信息: https ://medium.com/streamthoughts/apache-kafka-rebalance-protocol-or-the-magic-behind-your-streams-applications-e94baf68e4f2

于 2020-07-29T17:05:37.360 回答