目录
🧡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。
💌若恢复3节点,则添加到ISR末尾。
🧡Follower故障
🍠LEO(Log End Offset):每个副本最后一个数据为offset,LEO = offset + 1。
🍠HW(High Watermark):所有副本中最小的LEO,即最小的Broker上LEO和HW位置相同。
💌Follower故障如何处理:
🍠临时踢出ISR。
🍠Leader和Follower继续接收数据,LEO和HW往后移。
🍠待该Follower恢复后,Follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分去掉,从HW开始向Leader进行同步,即从故障的地方往后更新。
🍠等该Follower的LEO大于等于该Partition的HW,即Follower追上Leader之后,就可以重新加入ISR了。
🧡Leader故障
🍠从ISR中选出一个新的Leader。
🍠为保证多个副本之间的数据一致性,其余的Follower会先将各自的log文件高于HW的部分去掉,然后从新的Leader同步数据。
P.S. 只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。
🧡Broker分区副本分配
💌尽可能保证负载均衡,保证数据可靠性。
Leader Partition自动平衡
💌若某些Broker宕机,Leader Partition集中分布在其他Broker上,造成集群负载不均衡。
🍠auto.leader.rebalance.enable 默认true。
🍠每个Broker允许的不平衡的Leader比例超过10%,触发Leader再平衡。
不平衡率 = 不平衡数((Leader==AR中第一个节点)?0:1) / 分区数
🍠每300s检测一次。
P.S.最好不要频繁触发。