1. 程式人生 > 程式設計 >Kafka中失效副本與ISR伸縮流程

Kafka中失效副本與ISR伸縮流程

何為失效副本?

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

其中,同步失效主要與配置引數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…