(1) 创建了一个分区为4,副本数为4的topic:watchLeader。
可以看出四个partition的leader分别是0、2、3、4
(2) 关掉broker为0的kafka进程
可以看出,原来的leader为0的partition的leader变成了3,而isr中的0也消失了,其他的partition的follower中只剩下2、3、4
(3) 恢复broker为0的kafka进程
可以发现partition0的leader又变成了0,其他的partition的follower中也多了0,这是因为Zookeeper的负载均衡,当broker或consumer加入或离开时会触发负载均衡算法,使得一个consumer group内的多个consumer的订阅负载平衡。
遇到的问题与思考:
在broker为0的kafka进程恢复后,原以为0依然是follower,因为考虑到leader负责维护和跟踪ISR的中所有follower滞后的状态,如果follower“落后”太多或者失效,leader将会把它从ISR中删除。怀疑此时恢复的broker0进程因为是后恢复的,它的状态滞后或者信息更新不及时,后来发现:
即,leader是处理partition的读写请求的,所以即使它是刚恢复的进程,也不会损失数据,更不会造成状态的滞后等等。