腾讯云消息队列 CKafka 使用教程 - Consumer Group 概述
文档简介:
Consumer Group 状态说明:
消费者组列表页中 Consumer Group 的状态主要有 Dead、Empty、PreparingRebalance、AwaitingSync、Stable 几种,其中最常见的是 Empty、Stable 和 Dead 三种状态。Consumer Group 中的状态机转换如下图所示:
Consumer Group 状态说明
消费者组列表页中 Consumer Group 的状态主要有 Dead、Empty、PreparingRebalance、AwaitingSync、Stable 几种,其中最常见的是 Empty、Stable 和 Dead 三种状态。Consumer Group 中的状态机转换如下图所示:


Dead:消费者组内无成员并且 Metadata 已经被移除。
Empty:消费分组内当前没有任何成员。如果组内所有 offset 都已过期,则会变为 Dead 状态。一般新创建的 Group 默认为 Empty 状态。
开源 Kafka 0.10.x 版本规定,当消费分组内没有任何成员且状态持续超过7天,此消费分组将会被自动删除。
Stable:消费分组中各个消费者已经加入,处于稳定状态。
Rebalance 状态详解
Rebalance 发生原因
根据 Consumer Group 的状态机可知,当 Consumer Group 为 Empty、AwaitSync 或 Stable 状态时,Group 可能会进行 Rebalance。以下情况可能会发生 Rebalance:
一个消费者订阅了 Topic。
消费者被关闭。
某个 Consumer 被 Group Coordinator(协调器)认为是 Dead 状态时。
如果某个Consumer 在session.timeout.ms时间内没有给 Group Coordinator 发心跳,则该 Consumer 将被认为是 Dead 状态,并且发起 Rebalance。详请参见 CKafka 常用参数配置指南。
分区数增加。
订阅了不存在的 Topic。
如果您订阅了一个还未创建的 Topic,那么当这个 Topic 创建后会发生 Rebalance;同理,如果一个已经被订阅的 Topic 被删除,也会发生 Rebalance。
应用崩溃。
Rebalance 过程分析
以0.10版本Kafka 的机制为例,Rebalance 过程分析如下:
1. 任何一个 Consumer 想要加入到一个 Consumer Group 中时,会发送一个 JoinGroup 的请求给 Group Coordinator。第一个加入 Group 的 Consumer 会变成 Group Leader。
2. Leader 会从 Group Coordinator 处收到这个 Group 中所有 Consumer 列表,并且负责给 Group 中的 Consumer 分配 partition。分区的分配可以通过 PartitionAssignor 接口来实现。