面试题来源:
可回答:1)从ISR踢出去之后呢;2)一般Leader怎么判断Follower挂掉?
参考答案:
ISR(In-Sync Replicas):副本同步队列
ISR是Leader维护的一个动态副本同步队列,是和Leader保持同步的Follower集合。Kafka通过多副本来保证消息不丢失。
每一个Leader partition都有一个ISR,Leader动态维护,要保证Kafka不丢失message,就要保证ISR这组集合存活(至少有一个存活),并且消息commit成功。Partition Leader保持同步的Partition Follower集合,当ISR中Partition Follower完成数据的同步之后,就会给Leader发送ack。如果Partition Follower长时间(replica.lag.time.max.ms,默认10s)未向Leader同步数据,则该Partition Follower将被踢出ISR,存入OSR(Outof-Sync Replicas)列表(AR = ISR + OSR,AR(Assigned Repllicas):一个partition的所有副本(就是replica,不区分Leader或Follower)),新加入的Follower也会先存放在OSR中。Partition Leader发生故障之后,就会从ISR中选举新的Partition Leader。