kafka的副本同步机制(ISR)
一个topic可以有多个分区,多个副本(一般副本数量不大于分区数量)。一份分区下有多个副本,
ISR表示目前消息量与leader相差不多的副本集合,这是整个副本集合的一个子集”。怎么去理解
可用和相差不多这两个词呢?具体来说,ISR集合中的副本必须满足两个条件
- 副本所在节点必须维持着与zookeeper的连接
- 副本最后一条消息的offset与leader副本的最后一条消息的offset之间的差值不能超过指定的阈值
(replica.lag.time.max.ms) replica.lag.time.max.ms:如果该follower在此时间间隔内一直没有追
上过leader的所有消息,则该follower就会被剔除isr列表 - ISR数据保存在Zookeeper的/brokers/topics//partitions//state
节点中
follower副本把leader副本LEO之前的日志全部同步完成时,则认为follower副本已经追赶上了leader
副本,这个时候会更新这个副本的lastCaughtUpTimeMs标识,kafk副本管理器会启动一个副本过期检
查的定时任务,这个任务会定期检查当前时间与副本的lastCaughtUpTimeMs的差值是否大于参数
replica.lag.time.max.ms 的值,如果大于,则会把这个副本踢出ISR集合