rebalance是一种协议,它规定了消费组consumer group下所有的consumer如何使用topic相关的分区。
1.触发rebalance条件:
(1)组内成员发生变更;
(2)订阅topic发生变更;
(3)topic关联的分区数发生变更。
2.rebalance决策者
coordinator,按照一定算法产生的broker。
3.五种协议
(1)Heartbeat请求:consumer需要定期给coordinator发送心跳来表明自己还活着;
(2)LeaveGroup请求:主动告诉coordinator我要离开consumer group;
(3)SyncGroup请求:group leader把分配方案告诉组内所有成员;
(4)JoinGroup请求:成员请求加入组;
(5)DescribeGroup请求:显示组的所有信息,包括成员信息,协议名称,分配方案,订阅信息等。通常该请求是给管理员使用。
4.rebalance执行
(1)Join:即各个consumer向coordinator发送JoinGroup请求,由coordinator指定一个消费组leader,leader需要制定topic关联的分区分配方案;
(2)Sync:coordinator会将分配方案封装为SyncGroup响应发给每个consumer。
5.offset提交
consumer会将offset写请求发送给coordinator,响应成功后,表明offset提交成功。当发生rebalance时,coordinator会发给consumer心跳响应表明已经发生rebalance,consumer需重新提交offset写入请求。