kafka的isr理解


問題如下:

kafka 為了保證數據的一致性使用了isr 機制

1 首先我們知道kafka 的數據是多副本的,每個topic 下的每個分區下都有一個leader 和多個follower,

2 每個follower 的數據都是同步leader的 這里需要注意 是follower 主動拉取leader 的數據

注意問題:follewer 只是數據的副本提供數據的可恢復性,本身和kafka 的讀寫性能無關(kafka的讀寫都是和leader 相關)

3 那么問題就出來了 雖然每個分區都有多個副本,但是如何確定副本的數據和leader 的數據是同步的?

isr 的全稱是:In-Sync Replicas isr 是一個副本的列表,里面存儲的都是能跟leader 數據一致的副本,確定一個副本在isr列表中,有2個判斷條件

條件1:根據副本和leader 的交互時間差,如果大於某個時間差 就認定這個副本不行了,就把此副本從isr 中剔除,此時間差根據

配置參數rerplica.lag.time.max.ms=10000 決定 單位ms

條件2:根據leader 和副本的信息條數差值決定是否從isr 中剔除此副本,此信息條數差值根據配置參數rerplica.lag.max.messages=4000 決定 單位條

isr 中的副本刪除或者增加 都是通過一個周期調度來管理的

4 kafka 根據isr 機制和消息的ack方式保證的數據的一致性和保證冪等性(消息是否會重復消費。發送等)

 min.insync.replicas=n 配置參數表示 當滿足了n個副本的消息確認(n默認為1,最好大於1,因為leader 也在isr 列表中),才認為這條消息是發送成功的

min.insync.replicas 參數只有配合request.required.acks =-1 時才能達到最大的可靠性

request.required.acks 的參數說明:

0:生產者只管發送,不管服務器,消費者是否收到信息

1:只有當leader 確認了收到消息,才確認此消息發送成功

-1:只有isr 中的n-1個副本(leader 除外所以n-1)都同步了消息 此消息才確認發送成功

注意生產者發送的消息只有在確認發送成功后 才能被消費者消費

思考如果所有的副本都掛掉了會如何?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM