目录

🧡Broker副本

🧡Leader选举

🧡Follower故障

🧡Leader故障

🧡Broker分区副本分配

Leader Partition自动平衡



🧡Broker副本

💌默认副本1个,一般配2个。分区中所有副本统称AR,AR = ISR + OSR。

🍠ISR:Leader以及和Leader保持同步的Follower集合,若Follower长时间(默认30s)未向Leader发送请求或同步数据,则Follower将被踢出ISR。

🍠OSR:从ISR中踢出的延迟过多的副本。

🧡Leader选举

💌若Leader故障,从ISR中选举新的Leader。

🍠Broker启动后在Zookeeper中注册。

🍠谁先注册Controller,由其监听Broker节点变化。

🍠Controller决定Leader选举:在ISR中存活,按AR中的顺序轮询选举

🍠Controller将节点信息传到ZK。

💌若下图2、3分区的Leader挂掉,则新的Leader为:1,0,0,1。

kafka加白名单 kafka 白名单_kafka加白名单

💌若恢复3节点,则添加到ISR末尾。

🧡Follower故障

🍠LEO(Log End Offset):每个副本最后一个数据为offset,LEO = offset + 1。

🍠HW(High Watermark):所有副本中最小的LEO,即最小的Broker上LEO和HW位置相同。

kafka加白名单 kafka 白名单_数据一致性_02

💌Follower故障如何处理:

kafka加白名单 kafka 白名单_数据_03

🍠临时踢出ISR

🍠Leader和Follower继续接收数据,LEO和HW往后移。

🍠待该Follower恢复后,Follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分去掉,从HW开始向Leader进行同步,即从故障的地方往后更新

🍠等该Follower的LEO大于等于该Partition的HW,即Follower追上Leader之后,就可以重新加入ISR了。

kafka加白名单 kafka 白名单_kafka加白名单_04

🧡Leader故障

🍠从ISR中选出一个新的Leader

🍠为保证多个副本之间的数据一致性,其余的Follower会先将各自的log文件高于HW的部分去掉,然后从新的Leader同步数据。

P.S. 只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。

kafka加白名单 kafka 白名单_数据_05

🧡Broker分区副本分配

kafka加白名单 kafka 白名单_数据一致性_06

💌尽可能保证负载均衡,保证数据可靠性。

Leader Partition自动平衡

💌若某些Broker宕机,Leader Partition集中分布在其他Broker上,造成集群负载不均衡。

🍠auto.leader.rebalance.enable 默认true。

🍠每个Broker允许的不平衡的Leader比例超过10%,触发Leader再平衡。

不平衡率 = 不平衡数((Leader==AR中第一个节点)?0:1) / 分区数

🍠每300s检测一次。

P.S.最好不要频繁触发。