Kafka常见的消费模式会以组进行组织,通常Kafa会将Topic的分区均匀的分配给同一个组下的不同实例,通常的策略有以下三种:
目前触发reblance主要有以下几种情况:
consumer group可以执行多次reblance,为了保护consumer group特别是防止无效的offset提交,reblance generation通常用来标识某次reblance,每经历一次reblance该值都会加1,默认值是从0开始。假如一个genertion值为1的consumer发生了延迟提交,但是reblance已经产生了新的group成员并且generation值已经变为了2,那么该conumse的提交将会被拒绝(ILLEGAL_EXCEPTION)。
Kafka会使用以下4组请求来完成reblance。
除了上面4组请求外,还有一个特殊的请求:
reblance过程中,coordinator需要接收来自consumer的JoinGroup和SyncGroup请求。当reblance成功以后,consumer定期向coordinator发送HeartBeat请求,consumer同时也会根据HeartBeat响应中是否包含REBLANCEINPROCESS来判断当前group是否开启了新一轮reblance。当consumer主动离组时,需要向coordinator发送LeaveGroup请求。
consumer reblance之前需要首先选定coordinator所在的broker(并且建立Socket连接),算法:
reblance主要分为两步进行: