一. 什么是ISR ?
? ? Kafka 中通常每個分區都有多個副本,其中一個副本被選舉為 Leader,其他副本為 Follower。ISR 是指與 Leader 副本保持同步的 Follower 副本集合。ISR 機制的核心是確保數據在多個副本之間的一致性和可靠性,同時在 Leader 副本出現故障時能夠快速進行故障轉移,保證服務的可用性。
二.?ISR 基本原理:
1. 數據同步過程:
? ? 首先: 生產者發送的消息首先會被 leader 副本接收,leader 副本會將消息寫入本地日志文件,并更新其偏移量。follower 副本會定期向 leader 副本發送 fetch 請求,拉取新的消息。follower 副本在收到消息后,會將其寫入本地日志文件,并更新自己的偏移量。如果 Follower 副本能夠及時地從 leader 副本拉取到數據,并將其成功寫入本地日志,那么該 follower 副本就被認為是與 leader 副本保持同步的,會被包含在 ISR 集合中。
2. ISR 變更:
? ? ?當一個新的 follower 副本啟動并開始從 leader 副本拉取數據時,如果它能夠在一定時間內跟上 leader 副本的進度,即它的日志偏移量與 leader 副本的差距在允許范圍內,那么它就會被添加到 ISR 集合中。 反之,如果某個 follower 副本由于網絡故障、磁盤故障等原因,導致它與 leader 副本的差距超過了一定的閾值,那么它就會被從 ISR 集合中移除。當 follower 副本恢復正常后,會嘗試重新追趕 leader 副本,一旦追上,又會被重新加入到 ISR 集合中。
3. 選舉與故障轉移
選舉:當 leader 副本出現故障時,kafka 會從 ISR 集合中選舉一個 follower 副本作為新的 leader。通常選擇 ISR 中日志偏移量最大的 follower 作為新 leader,因為它的數據與原 leader 最為接近,能夠最大程度地保證數據的一致性。新的 leader 選舉出來后,它會等待 ISR 中的其他副本將數據同步到自己的高水位,然后才會開始處理新的消息。這樣可以確保在故障轉移過程中,已經被 ISR 中的所有副本確認的消息不會丟失,從而保證了數據的一致性。
4. 涉及到的配置參數:?
???????replica.lag.time.max.ms:用于配置 follower 副本與 leader 副本之間允許的最大延遲時間。如果 follower 副本在這個時間內沒有向 leader 副本發送 fetch 請求或者沒有跟上 leader 副本的進度,那么它將被認為是滯后的,并可能會被移出 ISR 集合。默認值是 10000 毫秒。
????????replica.lag.max.messages:follower 副本與 leader 副本之間允許的最大消息滯后數量。如果 follower 副本落后 leader 副本的消息數量超過了這個閾值,它也可能會被移出 ISR 集合。
三. ?查看ISR信息:
?查看某個topic的分區,ISR信息:
bin/kafka-topics.sh --describe --bootstrap-server 10.139.3.100:9092 --topic xxxx
???????
??----------------------------------------------------------------------------------------------
深耕運維行業多年,擅長linux、容器云原生、運維自動化等方面。
歡迎溝通交流!
(V:?xiaoxiangbj2013?) !