Kafka ISR機制和Raft區別:副本數優化的秘密

Kafka的ISR機制和像Raft這樣的傳統基于Quorum(法定人數)的協議之間的區別確實很微妙,但也非常重要。讓我們來分析一下為什么ISR可以減少所需的副本數量。

在采用ISR模型和(f+1)個副本數的配置下,一個Kafka分區能夠容忍最大f個節點失敗,相比于“少數服從多數”的方式所需的節點數大幅減少。實際上,為了能夠容忍f個節點失敗,“少數服從多數”的方式和ISR的方式都需要相同數量副本的確認信息才能提交消息。

比如,為了容忍1個節點失敗,“少數服從多數”需要3個副本和1個follower的確認信息,采用ISR的方式需要2個副本和1個follower的確認信息。在需要相同確認信息數的情況下,采用ISR的方式所需要的副本總數變少,復制帶來的集群開銷也就更低,“少數服從多數”的優勢在于它可以繞開最慢副本的確認信息,降低提交的延遲,而對Kafka而言,這種能力可以交由客戶端自己去選擇。

問題是:為什么它們有這么大的區別,ISR是如何實現副本數量減少的?

根本區別在于當舊的leader失效后,如何選擇新的leader

“多數投票”系統(如 Raft)

在像Raft這樣的系統中,領導者選舉是一個在所有副本節點之間進行的去中心化、對稱的過程

  1. 固定的Quorum:為了容忍?f?個故障,必須有?2f+1?個副本。這個數字是數學上必需的。
  2. 寫入Quorum:一個寫操作只有在被復制到大多數節點(f+1)后才被認為是“已提交”的。
  3. 選舉Quorum:新領導者只有在獲得大多數節點(f+1)的投票后才能當選。

2f+1?規則的奧妙在于,任何兩個多數派(Quorum)都保證會重疊。這意味著,在選舉新領導者時,投票給它的節點集合中必須包含至少一個接收了最后一次已提交寫入的節點。這個重疊的成員確保了過時的副本不能被選為領導者,從而防止數據丟失。領導者是誰的共識是在每次選舉期間由副本自己達成的。

Kafka的ISR(In-Sync Replica)模型

在Kafka中,領導者選舉是一個由一個特殊節點——Controller(控制器)——管理的中心化、非對稱的過程

  1. 動態的“Quorum”(即ISR):Kafka不使用固定的多數派,而是使用一個動態的、與領導者完全同步的副本集合。這就是同步副本集(In-Sync Replica, ISR)。
  2. 更嚴格的寫入條件:一個寫操作只有在被復制到當前ISR中的所有副本后,才被認為是“已提交”的(即高水位線可以推進)。
  3. 中心化任命:當領導者失敗時,副本們不進行投票。監控所有Broker健康狀況的Controller會注意到這個故障。然后,它會查看該分區的最新已知ISR,并任命其中一個幸存的副本作為新的領導者。

正如在文檔中看到的那樣:

design.html:496-498

// ... existing code ...It is also important to optimize the leadership election process as that is the critical window of unavailability. A naive implementation of leader election would end up running an election per partition for allpartitions a node hosted when that node failed. As discussed above in the section on <a href="#replication">replication</a>, Kafka clusters have a special role known as the "controller" which isresponsible for managing the registration of brokers. If the controller detects the failure of a broker, it is responsible for electing one of the remaining members of the ISR to serve as the new leader.
// ... existing code ...

為什么這能減少副本數量

Kafka的ISR模型通過改變問題的方式,有效地“取巧”了。它將達成共識的工作從單個分區轉移到了中心化的Controller上。

  • Raft?需要?2f+1?個副本,因為每個分區都必須能夠依靠重疊Quorum的數學保證,安全地自行選舉出新的領導者。
  • Kafka?的一個分區只需要?f+1?個副本,因為分區副本本身不做出領導決策。它們相信Controller會任命一個新的領導者。由于ISR中的任何副本都保證擁有所有已提交的數據(得益于嚴格的寫入條件),所以Controller的選擇總是安全的。

這將容錯的負擔轉移了。數據分區可以用?f+1?個副本容忍?f?個故障,但現在Controller本身必須是容錯的

這就引出了Raft在現代Kafka中的作用:

  • 在?KRaft(Kafka Raft Metadata)模式下,Controller們自己組成一個Quorum,并使用Raft協議就集群元數據——包括每個分區的ISR成員——達成一致。

所以,總結一下:

  1. Raft:在每個分區的?2f+1?個對等節點之間進行去中心化選舉。
  2. Kafka的數據分區:使用由Controller進行的中心化領導者任命,這使得它們只需要?f+1?個副本即可運行。
  3. Kafka的Controller(在KRaft模式下):它們之間使用Raft來確保其管理的元數據(如ISR列表)的可靠性和一致性。

通過將元數據的共識與數據復制路徑分離開來,Kafka優化了常見場景(數據復制),使其在副本數量、磁盤空間和網絡流量方面更加高效。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92037.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新手向:GitCode疑難問題診療

Git疑難問題診療引言在軟件開發過程中&#xff0c;版本控制系統&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;而Git以其分布式架構、強大的分支管理能力和高效的性能成為行業標準。然而&#xff0c;隨著項目復雜度的提升&#xff0c;Git的使用也可能遇到各種疑難問…

電子電氣架構 ---如何煥新升級為 48V 電氣架構

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

JavaScript判斷數字方法

在JavaScript中&#xff0c;判斷一個值是否為數字有多種場景&#xff0c;以下是常見方法及適用情況&#xff1a;1. 嚴格判斷數字類型&#xff08;排除NaN&#xff09;使用 typeof 結合 !isNaN()&#xff0c;確保值是 number 類型且非 NaN&#xff1a;javascriptfunction isNumb…

C++編程之旅-- -- --始探門庭的求知漫溯(二)

目錄引用內聯函數(C11)auto關鍵字基于范圍的for循環指針空值---nullptr引用 引用&#xff1a;指將變量以另一個名稱來展現的。它并非是一個新變量而是一個別名&#xff0c;它們同指一塊內存空間。就如古時那些有字的人,亦或者是周樹人&#xff0c;你說魯迅是不是周樹人呢&…

wordpress網站的“管理員郵箱地址”有什么用?

在WordPress網站的“設置”-“常規”中設置的“管理員郵箱地址”有多種用途&#xff0c;以下是詳細介紹&#xff1a; 一、用戶注冊相關 密碼找回功能 當網站用戶忘記密碼時&#xff0c;他們會通過點擊登錄頁面上的“忘記密碼”鏈接來重置密碼。WordPress系統會向管理員郵箱地…

202506 電子學會青少年等級考試機器人六級實際操作真題

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 六級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 202506 青少年等級考試機器人實操真題六級 一、實際操作 1. 主題&#xff1a;姿態傳感器交互步進電機左右…

Centos 安裝 redis

1.下載redis&#xff0c;這個自己去網上找吧。2.上傳文件&#xff0c;redis-7.4.1.tar.gz3.解壓&#xff1a;執行 tar -xf redis-7.4.1.tar.gz在進行安裝之前&#xff0c;檢查一下有沒有make、gcc、python3、沒有的話全部 yum install。安裝完之后&#xff0c;如果報一下錯誤&a…

算法訓練營DAY55 第十一章:圖論part05

并查集理論基礎 背景 當我們需要判斷兩個元素是否在同一個集合里的時候&#xff0c;我們就要想到用并查集。 并查集主要有兩個功能&#xff1a; 將兩個元素添加到一個集合中。判斷兩個元素在不在同一個集合 原理講解 從代碼層面&#xff0c;我們如何將兩個元素添加到同一個…

docker相關操作記錄

1.docker清理服務器上面沒有用到的鏡像#刪除本地鏡像 docker rmi $(docker images -q) #強制刪除本地鏡像 docker rmi $(docker images -q) -f2.docker查看日志docker logs c36c56e4cfa3 (容器id)3.所有運行或沒有運行的鏡像 docker ps -a4、停止container&#xff0c;這樣才…

LInux基礎學習筆記七

/dev/zero和/dev/null 是什么/dev/zero&#xff1a;一個零設備文件&#xff0c;讀取時會不斷返回\0字節&#xff08;零值字節&#xff09;&#xff0c;常用于創建空文件或格式化/dev/null&#xff1a;一個空設備文件&#xff0c;寫入它的內容會被丟棄&#xff0c;相當于“黑洞”…

軟件架構:系統結構的頂層設計與戰略約束

軟件架構&#xff1a;系統結構的頂層設計與戰略約束軟件架構是軟件系統的“骨架”與“憲法”&#xff0c;它定義了系統的根本性組織結構&#xff0c;包括構成系統的關鍵構件、它們之間的組織關系、交互機制、約束原則以及指導性決策。它決定了系統在性能、可擴展性、可靠性、可…

基于spring boot的個人博客系統

2 開發技術 3 2.1 VUE框架 3 2.2 Mysql數據庫 3 2.3 Spring Boot框架 3 2.4 layui介紹 4 本程序在設計結構選擇上首選B/S&#xff0c;也是為了滿足程序今后升級便利&#xff0c;以及程序低維護成本的要求。本程序的網絡拓撲設計也會在下圖展示&#xff0c;通過圖形的方式來描述…

Excel制作尖刀圖,直觀展示業績漲跌

Excel制作尖刀圖&#xff0c;直觀展示業績漲跌效果展示下圖是一個常見的兩年業績同比表&#xff0c;也是尖刀圖很常見的數據源類型&#xff0c;但是這個數據格式是無法直接制作的&#xff0c;需要對數據進行加工。1.對數據進行逆透視使用excel進行逆透視&#xff0c;最常見的方…

兩種路由模式(React-Router 8)

倆種路由模式 各個主流框架的路由常用的路由模式有倆種&#xff0c;history模式和hash模式,ReactRouter分別由createBrowerRouter和createHashRouter函數負責創建附帶代碼:import Login from "../page/Login"; import Article from "../page/Article"; imp…

【01】OpenCV C++實戰篇——基于多項式插值的亞像素邊緣定位算法

文章目錄一. 背景二. 你的經歷三. 代碼實現(龜速版——單線程)3.1 梯度幅值3.1.1 生成 8 個方向模板3.1.2 計算梯度3.1.3 顯示梯度圖像3.1.4 程序運行演示3.2 梯度方向 &#xff08;梯度最大幅度值和方向&#xff09;3.3 單像素邊緣3.4 梯度單像素邊緣提取 運行測試四 、亞像素…

400V降24V,200mA,應用領域:從生活到工業的 “全能電源管家”WD5208

WD5208 電源芯片&#xff1a;小身材蘊藏大能量的電源控制新星在電源芯片的技術星河中&#xff0c;WD5208 憑借獨特性能與廣泛適用性嶄露頭角&#xff0c;成為眾多電子設備電源方案的優選。本文將全面解析這款芯片的核心優勢、應用場景與技術細節&#xff0c;展現其 “小身材&am…

C++ 引用 和 指針 的區別

特性引用指針初始化不能為 null&#xff0c;必須綁定到有效的對象可以為 null&#xff0c;不指向任何對象重新綁定不能重新綁定&#xff0c;一旦初始化后始終引用同一個對象可以重新指向其他對象內存占用不占用額外內存&#xff0c;編譯器通常將其優化為所引用的對象占用額外內…

Claude Code實戰體驗:AI智能編程助手如何重塑開發工作流?

一、背景介紹 AI大模型的爆發&#xff0c;讓各種智能編碼工具如雨后春筍般涌現。Claude Code就是其中非常有代表性的一款——它不僅能補全代碼、查找Bug&#xff0c;還能理解復雜需求&#xff0c;甚至幫你寫文檔、生成測試用例。作為一名全棧開發者&#xff0c;我和團隊最近幾個…

centos7 個人網站搭建之gitlab私有化部署實現線上發布

文章目錄 效果展示架構設計申請免費阿里云服務器嘗試連接遠程服務 開放端口申請域名 綁定云服務器組網網關服務器配置轉發代理網關服務器配置ssl 證書問題排查證書申請時報錯&#xff1a;Set the \server_name\ directive ti use the Nginx installer. gitlab私有化部署搭建git…

小米4A千兆版路由器刷機,解決Telnet無法連接問題

刷機極容易變磚&#xff0c;建議完全理清步驟后再進行操作 工具準備 1、小米4A千兆版路由器&#xff08;注意一定是千兆版&#xff0c;只是4A無千兆按下列步驟會變磚&#xff09;&#xff0c;適配電源線 2、網線一根 3、需保證刷機過程中網線接入是有網的&#xff0c;無需賬號認…