您好,登錄后才能下訂單哦!
這篇文章主要介紹“KAFKA中的ISR是什么”,在日常操作中,相信很多人在KAFKA中的ISR是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”KAFKA中的ISR是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
【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是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。