我们知道kafka其实是通过Coordinator模块组件,对consumer的rebalence阶段进行管理。其实kafka内部设计,是存在broker端的GroupCoordinator和consumer端的ConsumerCoordinator。
broker端GroupCoordinator内部维护了一个状态机。保证同一时刻每个消费者进行请求,状态达到下一状态后再进行后续操作。
状态机的几种状态empty join sync stable
broker端的作用基本上是响应consumer端的操作
FIND_COORDINATOR 消费者第一次加入消费者组之后,需要确定谁是Coordinator
JOIN_GROUP 加入消费者组,并选举出一个consumer的leader。max.poll.interval.ms的值,默认是5分钟,所以这个发送join请求会阻塞对rebalence的影响是最大的。
sync,将分区分配策略下发给consumer。
Rebalance Generation维护统一的状态,每次rebalence都会增加 Generation,落后 Generation的consumer的提交将会被忽略。