kafka的leader和follower

leader和follower

kafka的leader和follower是相對于分區有意義的,不是相對于broker。

因為每個分區都有leader和follower,

leader負責讀寫數據。

follower負責復制leader的數據保存到自己的日志數據中,并在leader掛掉后重新選舉出leader。

kafka會再創建topic的時候盡量讓分配分區的leader在不同的broker中,就是負載均衡。

與Zookeeper區分

zookeeper的leader負責讀寫,follower可以讀取。

kafka的leader負責讀寫,follower不能讀寫數據(確保每個消費者消費的數據是一致的),kafka一個topic有多個分區leader,一樣可以實現負載均衡。

AR/ISR/OSR

kafka的follower可以分為三類:AR ISR OSR

  • AR(Assigned Replicas)表示一個topic下的所有副本。
  • ISR(In-Sync Replicas)表示一個topic下正在同步的副本。
  • OSR表示(OUT-SYNC-Replicas)不再同步的副本。

AR=ISR+OSR

查看分區的ISR

使用Kafka Eagle查看某個Topic的partition的ISR有哪幾個節點。

partition是創建的topic為test的? 0 1 2 三個分區。

Log Size是日志文件的大小

Leader是leader副本在那個broker節點上

Replicas是它的副本在哪些broker節點上。

In sync Replicas是正在同步的副本(包括leader)

嘗試關閉id為0的broker(殺掉該broker的進程),參看topic的ISR情況。

leader的選舉

leader的選舉對于消息的寫入以及讀取非常關鍵,此時有兩個疑問:

  • kafka是如何確定partition的哪個副本是leader,那個副本是follower呢?
  • 某個leader崩潰后,怎么快速確定另一個leader呢?因為Kafka的吞吐量很高、延遲很低,所以選舉leader必須非常快

leader崩潰,kafka如果處理

使用Kafka Eagle找到某個partition的leader,再找到leader所在的broker。在Linux中強制殺掉該Kafka的進程,然后觀察leader的情況。

通過觀察,我們發現,leader在崩潰后,Kafka又從其他的follower中快速選舉出來了leader。

Controller

  • kafka啟動的時候,會在所有的broker中選舉出controller
  • 前面的leader和follower是針對partition的副本,而controller是針對broker的。
  • 創建topic或者添加分區,修改副本數量之類的管理任務都是交給controller完成的。
  • kafka分區leader的選舉,也是由controller決定的。

Controller的選舉

  • 在kafka集群啟動的時候,每個broker都會嘗試去Zookeeper上注冊為controller(ZK臨時節點)
  • 但是只有一個競爭成功,其他的broker會注冊該節點的監視器。
  • 一但節點的狀態發生變化,就可以進行處理。
  • Controller也是高可用的,一旦某個broker崩潰,其他的broker會重新注冊為Controller。

Controller選舉partition的leader

  • 所有Partition的leader選舉都由controller決定.
  • controller會將leader的改變通過RPC的方式通知需要為此做出響應的Broker
  • controller讀取當前分區的ISR,只要有一個Replica還幸存,就選擇其中一個作為leader。
  • 如果該partition的所有Replica都已經宕機,則新的leader為-1

為什么不通過ZK的方式進行選舉?

如果kafka是居于ZK進行選舉,ZK的壓力比較大,例如某個節點崩潰,這個節點上不僅僅只有一個leader,是有不少的leader需要選舉,通過ISR可以快速選舉。

leader的負載均衡

kafka中引入Preferred Replica的概念,意思是優先的Replica。

在ISR中第一個replica就是preferred-replica.

副本存放的第一個broker,肯定就是preferred-replica

執行以下腳本可以將preferred-replica設置為leader,均勻分配每個分區的leader。

./kafka-leader-election.sh --bootstrap-server node1.itcast.cn:9092 --topic 主題 --partition=1 --election-type preferred

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

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

相關文章

pinia 重置狀態插件

一、前言 測試提出,登出登錄后,再次進入頁面后。頁面的查詢項非初始狀態。檢查后發現,是因為查詢項的值存到了store呢,從store中獲取,故需要一個重置store的方法 二、pinia 查閱pinia官網后,發現pinia提…

請求分頁存儲管理方式

目錄 請求分頁中的硬件支持 1. 請求頁表機制 2. 缺頁中斷機構 硬件支持的詳細工作流程 示例代碼 請求分頁中的內存分配 最小物理塊數的確定 分配方式 分配公平性 請求分頁存儲管理方式中的內存分配策略 具體示例 頁面調入策略 最近最久未使用(LRU, Leas…

(2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,雙向掃描)xLSTM 作為通用視覺骨干

Vision-LSTM: xLSTM as Generic Vision Backbone 公和眾與號:EDPJ(進 Q 交流群:922230617 或加 VX:CV_EDPJ 進 V 交流群) 目錄 0. 摘要 2 方法 3 實驗 3.1 分類設計 4 結論 0. 摘要 Transformer 被廣泛用作計算…

linux常用操作命令匯總

各個軟件安裝步驟流程 jdk 鏈接: mysql 鏈接: redis 要查詢 Linux 上各個應用程序占用的內存 要查詢 Linux 上各個應用程序占用的內存,可以使用 top 或 ps 命令結合其他工具來實現。下面介紹兩種方法 方法一:使用 top 命令 打…

Access數據中的SQL偏移注入

使用場景: 目標數據表的字段較多,無法一一獲取的時候,嘗試使用偏移注入的方式實現SQL注入。 原理: 例如:一個表有6個字段,而你想獲取的目標表admin的字段不知道,此時可以使用聯合查詢的方式獲…

反射型xss靶場練習

反射型xss危害小,這里使用的xss靶場是常用的xss靶場:xss-labs。 當我們完成彈窗后就通過該關卡,說該關卡存在xss的一個漏洞并且可以解析js代碼。 第一關: 這里沒有過濾我們輸入的代碼:直接將js代碼放在js代碼中&a…

12、架構-流量治理之服務容錯

概述 容錯性設計(Design for Failure)是微服務的另一個核心原 則,也是筆者書中反復強調的開發觀念轉變。不過,即使已經有一定 的心理準備,大多數首次將微服務架構引入實際生產系統的開發者, 在服務發…

web前端 麥子學院:探索前端技術的無盡奧秘

web前端 麥子學院:探索前端技術的無盡奧秘 在數字化浪潮洶涌的時代,Web前端技術作為連接用戶與互聯網的橋梁,正以其獨特的魅力吸引著無數開發者。麥子學院,作為前端技術學習的殿堂,為我們提供了深入探索前端技術的寶貴…

Linux下線程的互斥與同步詳解

🤖個人主頁:晚風相伴-CSDN博客 💖如果覺得內容對你有幫助的話,還請給博主一鍵三連(點贊💜、收藏🧡、關注💚)吧 🙏如果內容有誤或者有寫的不好的地方的話&…

android:text 總為大寫字母的原因

當設置某個 Button 的 text 為英文時&#xff0c;界面上顯示的是該英文的大寫形式&#xff08;uppercase&#xff09;。例如&#xff1a; <Buttonandroid:id"id/btn"android:layout_width"wrap_content"android:layout_height"wrap_content"…

centos7 安裝 mysql5.7 LTS

centos7 安裝 mysql5.7 LTS 參考&#xff1a; https://blog.csdn.net/EB_NUM/article/details/105425622 可以在運行安裝程序之前導入密鑰&#xff1a; sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022第一步、下載MySQL 安裝包&#xff1a; sudo wget h…

Python 中的內存管理機制

Python 的內存管理機制主要由兩個部分組成&#xff1a;垃圾回收機制和引用計數。 垃圾回收機制主要負責檢測和回收不再被使用的內存。Python 使用的是自動垃圾回收機制&#xff0c;也就是說程序員不需要手動釋放內存。Python 的垃圾回收機制采用了引用計數的方法來追蹤和回收不…

植物大戰僵尸雜交版破解C++實現

文章目錄 前言準備工作&#xff1a;基地址與偏移UI界面設計和綁定項目模板總覽圖生成與實現信號處理1、陽光值更新:BTN12、三種錢幣值更新:BTN2-BTN43、冷卻刷新:BTN54、鎖定陽光&#xff1a;check15、無冷卻&#xff1a;check26、OnTimer&#xff08;&#xff09;和OnClose&am…

git合并多個項目并保留提交版本記錄

目錄 一、場景 二、合并步驟 1.本地新建 all 目錄&#xff0c;并初始化 2.在 all 中添加 a&#xff0c;b&#xff0c;c 的遠程分支 3.驗證是否添加成功 4.在 all 目錄下&#xff0c;獲取 a, b,c 的 master 分支數據 5.合并項目并移動到子目錄中 6.推送 all 的 master 分支…

二開版微交易系統

下載地址&#xff1a;二開版微交易系統

集成學習概述

概述 集成學習(Ensemble learning)就是將多個機器學習模型組合起來&#xff0c;共同工作以達到優化算法的目的。具體來講&#xff0c;集成學習可以通過多個學習器相結合&#xff0c;來獲得比單一學習器更優越的泛化性能。集成學習的一般步驟為&#xff1a;1.生產一組“個體學習…

實戰 | YOLOv10 自定義數據集訓練實現車牌檢測 (數據集+訓練+預測 保姆級教程)

導讀 本文主要介紹如何使用YOLOv10在自定義數據集訓練實現車牌檢測 (數據集訓練預測 保姆級教程)。 YOLOv10簡介 YOLOv10是清華大學研究人員在Ultralytics Python包的基礎上&#xff0c;引入了一種新的實時目標檢測方法&#xff0c;解決了YOLO以前版本在后處理和模型架構方面…

規范系統運維:系統性能監控與優化的重要性與實踐

在當今這個高度信息化的時代&#xff0c;企業的IT系統運維工作顯得尤為關鍵。其中&#xff0c;系統性能監控和優化是運維工作中不可或缺的一環。本文旨在探討規范系統運維中系統性能監控與優化的重要性&#xff0c;并分享一些實踐經驗和策略。 一、系統性能監控與優化的重要性…

RAGFlow 學習筆記

RAGFlow 學習筆記 0. 引言1. RAGFlow 支持的文檔格式2. 嵌入模型選擇后不再允許改變3. 干預文件解析?4. RAGFlow 與其他 RAG 產品有何不同&#xff1f; ?5. RAGFlow 支持哪些語言&#xff1f; ?6. 哪些嵌入模型可以本地部署&#xff1f; ?7. 為什么RAGFlow解析文檔的時間比…

自動化裝箱封箱解決方案:深度探討其優勢及故障處理技巧

在當今這個快節奏、高效率的時代&#xff0c;自動化裝箱封箱解決方案以其獨特的優勢&#xff0c;正逐漸成為物流、倉儲等行業的新寵。它不僅能大幅提升作業效率&#xff0c;還能顯著降低人工成本&#xff0c;減少人為錯誤。星派將深度探討自動化裝箱封箱技術的顯著優勢&#xf…