您好,登錄后才能下訂單哦!
怎樣解析Kafka副本與ISR設計,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在Kafka中一個分區日志其實就是一個備份日志,kafka利用多個相同備份日志來提高系統的可用性。這些備份日志其實就是所謂的副本。
Kafka的副本具有leader副本和follower副本之分,leader副本為客戶端提供讀寫請求,follower副本只是用于被動地從leader副本中同步數據,對外不提供讀寫服務。
Kafka的所有節點所有副本假設都在正常運行,那么leader副本會一直不變,但是所謂世界上沒有絕對穩定的系統,一旦kafa的leader副本節點出現了問題,那么follower副本需要競爭上崗成為leader副本,但是并不是所有的follower副本都有資格競爭上崗,很明顯假設一個follower落后的數據遠遠少于leader副本,它是沒有資格的。因此Kafka內部維護了一組具有資格的follower副本,他們統稱ISR。
ISR中的副本會被剔除,也會有新增。
下圖主要講述了Kafka日志中重要概念,下圖的相關概念事關生產、消息消費、ISR以及副本同步機制。
首條消息位移(offset):保存了該副本中所含的第一條消息的offset
日志高水印值(HW):leader副本的HW決定了消費者所能消費的消息范圍,低于等于HW的消息均可被消費者消費
結束位移(LEO):LEO總是指向下一條消息寫入的位置,處在leader的HW和LEO之間的消息表示還未完全備份。只有所有處于ISR中副本都更新了自己LEO以后,leader的HW才會右移表示寫入消息成功。
ISR其實就是Kafka內部維護的具有競爭上崗的一組與leader同步follower的副本集合。
follower副本與leader副本不同步的原因:
同步數據請求速度追不上:follower副本在一段時間無法追上leader副本端的消息接收速度。比如follower副本的網絡I/O阻塞,這會導致follower副本同步leader副本的速度大大降低
進程卡住:follower副本一段時間無法向leader發出請求,比如follower頻繁的進行GC
新創建的副本:用戶主動增加副本數,新創建的副本在啟動后會追趕leader的進度,這段時間新增的follower副本通常與leader副本是不同步的
該參數用來檢測同步數據請求速度追不上的問題,如果ISR中的副本消息數落后于leader副本的消息數超過了該參數的設置,將會被踢出ISR。
這個參數在kafka0.9.0.9版本之后被移除,為什么被移除呢?
肯定是有他的弊端的。考慮以下這個情況,kafka在的生產者的生產速率不是平穩的,會有高峰會有低峰,在高峰的時候,由于消息大量聚集產生,導致ISR中的消息與Leader的消息差超過了該數值,因此ISR中的副本將會被踢出。
但隨著生產消息速率的穩定和下降,并且此時follower副本也在全力追趕leader副本,當follower副本重新追上leader副本時,又會重新加入ISR。
該參數用來檢測另兩種情況:如果在該時間內,follower副本無法向leader副本請求數據,那么將會被踢出ISR。
由于在新的版本中移除了replica.lag.max.messages參數的設置,因此replica.lag.max.ms也用于同步數據請求速度追不上問題的檢測,但用在次問題的檢測上時,檢測機制是只要follower副本落后于leader的時間不持續性超過該參數即視為同步,如果持續性超過該參數即視為不同步。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。