在Kafka中一個分區日誌其實就是一個備份日誌,kafka利用多個相同備份日誌來提升系統的可用性。這些備份日誌其實就是所謂的副本。網絡
Kafka的副本具備leader副本和follower副本之分,leader副本爲客戶端提供讀寫請求,follower副本只是用於被動地從leader副本中同步數據,對外不提供讀寫服務。spa
Kafka的全部節點全部副本假設都在正常運行,那麼leader副本會一直不變,可是所謂世界上沒有絕對穩定的系統,一旦kafa的leader副本節點出現了問題,那麼follower副本須要競爭上崗成爲leader副本,可是並非全部的follower副本都有資格競爭上崗,很明顯假設一個follower落後的數據遠遠少於leader副本,它是沒有資格的。所以Kafka內部維護了一組具備資格的follower副本,他們統稱ISR。日誌
ISR中的副本會被剔除,也會有新增。blog
下圖主要講述了Kafka日誌中重要概念,下圖的相關概念事關生產、消息消費、ISR以及副本同步機制。
進程
ISR其實就是Kafka內部維護的具備競爭上崗的一組與leader同步follower的副本集合。rem
follower副本與leader副本不一樣步的緣由:kafka
該參數用來檢測同步數據請求速度追不上的問題,若是ISR中的副本消息數落後於leader副本的消息數超過了該參數的設置,將會被踢出ISR。同步
這個參數在kafka0.9.0.9版本以後被移除,爲何被移除呢?it
確定是有他的弊端的。考慮如下這個狀況,kafka在的生產者的生產速率不是平穩的,會有高峯會有低峯,在高峯的時候,因爲消息大量彙集產生,致使ISR中的消息與Leader的消息差超過了該數值,所以ISR中的副本將會被踢出。class
但隨着生產消息速率的穩定和降低,而且此時follower副本也在全力追趕leader副本,當follower副本從新追上leader副本時,又會從新加入ISR。
該參數用來檢測另兩種狀況:若是在該時間內,follower副本沒法向leader副本請求數據,那麼將會被踢出ISR。
因爲在新的版本中移除了replica.lag.max.messages參數的設置,所以replica.lag.max.ms也用於同步數據請求速度追不上問題的檢測,但用在次問題的檢測上時,檢測機制是隻要follower副本落後於leader的時間不持續性超過該參數即視爲同步,若是持續性超過該參數即視爲不一樣步。