Kafka rebalance流程

重平衡(rebalance)

旧版本Kafka依托于Zk进行rebalance,新版本consumer使用了Kafka内置的一个全新的组协调协议。对于每个组而言,Kafka的某个broker会被选举为组协调者(coordinator)。

触发条件:

1.组成员发生变更。

2.组订阅topic数发生变更。比如使用基于正则表达式的订阅,当匹配正则表达式的新topic被创建时则会触发rebalance

3.组订阅topic的分区数发生变更。比如使用命令行脚本增加了订阅topic的分区数。

分区策略:

range,round-robin,sticky策略

rebalance generation:

表示rebalance之后的一届成员,在consumer中它是一个整数,从0开始。主要是为了保护consumer group,特别是防止无效的offset提交,比如上一届的consumer成员由于某些原因延迟提交了offset,但rebalance之后该group产生了新一届group成员,而这次新延迟的offset提交携带的是旧generation信息,因此这次提交会被consumer group拒绝。

rebalance协议:

JoinGroup请求:consumer请求加入组

SyncGroup请求:group leader把分配方案同步到组内所有成员中

Heartbeat请求:consumer定期向coordinator汇报心跳表明自己依然存活

LeaveGroup请求:consumer主动通知coordinator该conumer即将离组。

DescribeGroup请求:供管理员使用,查看组的所有信息,包括成员信息,协议信息,分配方案以及订阅信息等

在成功rebalance之后,组内所有consumer都需要定期向coordinator发送Heartbeat请求,而每个consumer也是根据Heartbeat请求的响应中是否包含REBALANCE_IN_PROGRESS来判断当前group是否开启了新一轮rebalance

猜你喜欢

转载自www.cnblogs.com/lccsblog/p/11209341.html