消费组与分区重平衡
-
当有新的消费者加入到消费者组时,原本的分区就需要重新分配;比如一个topic有30个分区,原本只有两个消费者,每人负责15个分区,当新加入一个消费者时,并没有分区可以给他消费,只能是将30个分区重新分配。
每个消费者组都会有一个broker负责协调(称为group coordinator),各个消费者通过发送心跳的方式向组协调者同步状态,当有消费者一定时间没有给组协调者发送心跳或者有新的消费者加入到消费者组时,就会触发消费组的重平衡操作。
新加入消费者触发重平衡: 1.新加入消费者向组协调者发送joinGroup请求,携带订阅的topic信息 2.此后组协调者收到组内其他消费者的心跳请求时,在响应中告诉消费者要重平衡 3.组内原有消费者会重新发送joinGroup请求到组协调者 4.组协调者根据发送joinGroup请求的先后选出消费者leader,将topic和分区信息响应给各个消费者 5.被选为leader的消费者将分区分配好 6.各消费者发送SyncGroup请求给组协调者请求新分配好的分区信息,其中消费者leader会携带分配好的分区信息 7.组协调者将各个消费者负责的分区信息响应给消费者,重平衡完成 消费者主动离开导致重平衡 1.消费者发送leaveGroup请求给组协调者 2.此后组协调者收到组内其他消费者的心跳请求时,在响应中告诉消费者要重平衡 3.消费者会重新发送joinGroup请求到组协调者 4.组协调者根据发送joinGroup请求的先后选出消费者leader,将topic和分区信息响应给各个消费者 5.被选为leader的消费者将分区分配好 6.各消费者发送SyncGroup请求给组协调者请求新分配好的分区信息,其中消费者leader会携带分配好的分区信息 7.组协调者将各个消费者负责的分区信息响应给消费者,重平衡完成 消费者失去心跳导致重平衡 1.消费者一定时间内没有发送心跳信息给组协调者 2.此后组协调者收到组内其他消费者的心跳请求时,在响应中告诉消费者要重平衡 3.消费者会重新发送joinGroup请求到组协调者 4.组协调者根据发送joinGroup请求的先后选出消费者leader,将topic和分区信息响应给各个消费者 5.被选为leader的消费者将分区分配好 6.各消费者发送SyncGroup请求给组协调者请求新分配好的分区信息,其中消费者leader会携带分配好的分区信息 7.组协调者将各个消费者负责的分区信息响应给消费者,重平衡完成