Kafka中失效副本与ISR伸缩流程

2,549 阅读2分钟

何为失效副本?

失效副本中的失效包括功能失效和同步失效。

其中,同步失效主要与配置参数replica.lag.time.max.ms 以及副本同步参数lastCaughtUpTimeMs 有关。同步失效的副本会被踢出ISR集合。

一般有两种情况会导致副本失效:

  • follower副本进程卡住,在一段时间内根本没有向leader副本发起同步请求,比如频繁的Full GC。
  • follower副本进程同步过慢,在一段时间内都无法追赶上leader副本,比如IO开销过大。

ISR 伸缩

ISR 集合的缩减

1、isr-expiration定时任务会周期性的检测每个分区是否需要缩减其ISR集合,当检测到ISR中有是失效的副本的时候,就会缩减ISR集合;

2、将变更后的数据记录到ZooKerper对应/brokers/topics//partition//state节点;

3、将变更后的数据缓存到isrChangeSet;

4、isr-change-propagation定时任务会周期性(固定值为2500ms)地检查isrChangeSet,在zk 中的 /isr_change_notification 节点下创建isr_change开头的持久顺序节点,并保存isrChangeSet 的数据;

5、kafka控制器为/isr_change_notification添加了一个Watcher,当这个节点中有子节点发生变化的时候会触发Watcher动作,以此通知控制器更新相关的元数据信息并向它管理的broker节点发送更新元数据信息的请求。最后删除/isr_change_notification的路径下已经处理过的节点

ISR 集合的增加

何时扩充ISR的?

随着follower副本不断进行消息同步,follower副本LEO也会逐渐后移,并且最终赶上leader副本,此时follower副本就有资格进入ISR集合,追赶上leader副本的判定准侧是此副本的LEO是否大于等于leader副本HW

1、更新ZooKeeper中的/broker/topics//partition//state节点和isrChangeSet

之后的操作同ISR 集合的缩减。

频繁的触发Watcher会影响kafka控制器,zookeeper甚至其他的broker性能。为了避免这种情况,kafka添加了指定的条件,当检测到分区ISR集合发生变化的时候,还需要检查一下两个条件: (1).上一次ISR集合发生变化距离现在已经超过5秒, (2).上一次写入zookeeper的时候距离现在已经超过60秒。 满足以上两个条件之一者可以将ISR写入集合的变化的目标节点。

参考:

blog.csdn.net/u013256816/… blog.csdn.net/lukabruce/a…