共計 1745 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹“KAFKA 中的 ISR 是什么”,在日常操作中,相信很多人在 KAFKA 中的 ISR 是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”KAFKA 中的 ISR 是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
【ISR 是什么】
首先,ISR 的全稱叫做:In-Sync Replicas(同步副本集), 我們可以理解為和 leader 保持同步的所有副本的集合。
一個分區的所有副本集合叫做 AR(Assigned Repllicas)
與 leader-replica 未能保持同步的副本集叫做 OSR(Out-Sync Relipcas)
因此我們就能得到這么一個表示:AR = ISR + OSR,翻譯一下就是一個分區的副本集分為同步集合和非同步集合兩部分。
那么我們可以假設一個場景,一個分區的 AR 集合為【0,1,2,3,4,5】,其中 leader-replica 是 0
其中【1,2,3】作為 follower 和 leader 的數據保持同步,而【4,5】未能和 leader 保持同步,
那么此時,ISR=【0,1,2,3】,OSR=【4,5】
如果此時副本 4 追上了 leader-replica,也就是和 leader 保持到了同步
那么此時,ISR=【0,1,2,3,4】,OSR=【5】
從上面的場景我們就可以明白,ISR 動態維護了一個和 leader 副本保持同步副本集合,ISR 中的副本全部都和 leader 的數據保持同步。
【ISR 的作用是什么】
我們思考一下,我們知道了與 leader 保持同步的副本集后,可以做到哪些事情?
1、當我們生產消息的時候,到底要寫入多少副本才能算成功呢?
2、當 leader 掛了之后,我們應該選擇哪個 follower 來成為新的 leader 呢?
那么對應的,通過 ISR,我們知曉了哪些 follower 與 leader 保持著同步,
那么我們就可以在寫入消息的時候,設置寫入處于 ISR 中所有的副本才算成功,
那么我們在進行 leader 切換的時候,就可以從 ISR 中選擇對應的 follower 成為新的 leader。
這就是 ISR 的作用:是通過副本機制實現消息高可靠,服務高可用時,不可缺少的一環;這也是為什么講到副本不得不提到 ISR 的原因。
【為什么要設計 ISR 機制】
在一些中間件中,都有副本的概念,在不同的場景下寫入數據時,要求寫入副本的個數也不盡相同。
例如 zk 中要求寫入的節點個數大于一半才算成功,或者有些要求高可靠性的場景,規定寫入所有副本才能算成功。
而 kafka 的 ISR 可以允許生產消息時,根據自己的業務場景自行配置想要達到的效果:
acks=0:fire and forget,也就是我發了就算完了,后續成不成功我都不管,這種設置下消息的高可靠性幾乎沒有保障,但是有極大的吞吐量。
acks=1:寫入主節點就算成功,這種設置,可以保障一定的高可靠性,也具有不錯的吞吐量。
acks=all:也就是寫入 ISR 中所有的副本才算成功,這種設置下,就能提供較高的高可靠性,但是吞吐量就相對較低。
我們在考慮生產消息時,ISR 機制可以友好的讓使用者根據自己的業務需求去設置參數,去選擇自己想要達到什么程度的可靠性,而不是只提供一種可靠性選擇。
補充:我們的 ISR 是動態伸縮的,可能出現 follower 全部都掛了,ISR 中只剩下 leader,那么此時設置 acks=all 就等價于 acks= 1 了
這樣就會對高可靠性要求的場景產生危險,那么 kafka 提供了參數:min.insync.replicas
這個參數可以配置最少 ISR 中需要多少個副本,才能繼續提供寫服務。如果設置為 2,一旦 ISR 中的個數小于 2,那么就不再提供寫服務,犧牲一定的可用性,來保障這種高可靠的場景需求。
最后,我們回答這個小節的問題:ISR 機制的存在是 kafka 為了平衡可靠性和可用性,不指定提供高可靠或者高可用的服務,而是將決定權交給了使用者,讓使用者通過參數來控制,到底要實現什么程度的高可靠與高可用。
到此,關于“KAFKA 中的 ISR 是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!