Kafka 控制器(controller)

Kafka 控制器(controller)

在kafka集群中 會存在一個或者多個broker(一個服務器就是一個broker),其中有一個broker會被選舉為控制器 kafka controller ,負責管理整個集群中所有副本、分區的狀態,主要為以下三個功能:

  • 當某個分區中的leader 副本發生故障時,控制器負責選舉新的leader副本
  • 某個分區的ISR信息發生變化時,控制器負責通知所有的broker更新元數據信息
  • 某個topic增加分區時,控制器負責分區的重新分配

控制器如何選舉呢?

依賴于zookeeper,選舉成功的controller會在zk中創建/controller臨時節點。

每個broker在啟動的時候都會嘗試創建一個controller節點,但是只有一個可以成功,創建成功后的臨時節點 內容可以如下所示:

{“version”:1,“brokerid”:0,“timestamp”:“xxxxxxxxx”}

version貌似目前是固定的

brokerid 表示選舉成功的broker

timestamp 表示選舉成功時的時間戳

另外 在zk中還有一個/controller_epoch持久節點,記錄當前的控制器是第幾代控制器,初始值為1,保證控制器的唯一性。

控制器在選舉成功后會讀取zk的各個節點數據來初始化上下文信息,這些信息需要同步到其他的普通broker節點中。這就涉及到線程安全問題,kafka控制器是如何確保線程安全的同時又確保性能的呢?

在這里插入圖片描述

如圖所示,將每個事件(這些事件會讀取或者更新上下文信息)封裝,按照先后順序暫存到LinkedBlockingQueue中,使用一個ControllorEventThread線程按照FIFO的原則處理各個事件

優雅關閉:

kafka-server-stop.sh 不一定都有用。

分區leader的選舉

由kafka controllor負責,選舉規則:在ISR中存活,在AR中靠前的第一個。

ISR:表示和 Leader 保持同步的 Follower 集合 (“活著”),follower長時間沒有向leader發送通信請求或者同步數據,就會被踢出isr,時間由replica.lag.time.max.ms參數設定默認是30s。

OSR:表示延遲過多的副本。(“死了”)

AR:ISR+OSR

參考:《深入理解 Kafka:核心設計與實踐原理》

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

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

相關文章

多語言快速排序算法

快速排序是一種高效的排序算法,使用分治法策略。它的基本思想是:選擇一個元素作為“基準”(pivot),重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的擺在基準的后面。在這個分…

python內置模塊binascii,二進制數據和ASCII字符串之間進行轉換

一、簡介 binascii是Python標準庫中的一個模塊,提供了在二進制數據和ASCII字符串之間進行轉換的功能。它包含了一些用于處理二進制數據的函數,可以進行二進制數據的編碼、解碼和轉換。 二、方法 binascii.unhexlify(hexstr):將十六進制表示…

事件循環機制及常見面試題

借鑒: 《Javascript 忍者秘籍》第二版,事件循環篇 面試 | JS 事件循環 event loop 經典面試題含答案 - 知乎 (zhihu.com) 概念 主棧隊列就是一個宏任務,每一個宏任務執行完就會執行宏任務中的微任務,直到微任務全部都執行完&a…

Python 使用XlsxWriter操作Excel

在數據處理和報告生成的領域中,Excel 文件一直是廣泛使用的標準格式。為了讓 Python 開發者能夠輕松創建和修改 Excel 文件,XlsxWriter 庫應運而生。XlsxWriter 是一個功能強大的 Python 模塊,專門用于生成 Microsoft Excel 2007及以上版本&a…

Vue3-provide和inject

作用和場景:頂層組件向任意的底層組件傳遞數據和方法,實現跨層組件通信 跨層傳遞普通數據: 1.頂層組件通過provide函數提供數據 2.底層組件通過inject函數獲取數據 既可以傳遞普通數據,也可以使用ref傳遞響應式數據&#xff08…

批量插入SQL 錯誤 [933] [42000]: ORA-00933: SQL 命令未正確結束

使用DBeaver向【oracle數據庫】插入大量數據 INSERT INTO Student(name,sex,age,address,birthday) VALUES(Nike,男,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike…

使用Arrays.Sort并定制Comparator排序解決合并區間

合并區間-力扣算法題56題 以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。 示例 1: 輸入&am…

新能源行業碳酸氫鋰純化除鈣鎂工藝

在碳酸氫鋰純化中常規的沉淀或者其它工藝不能夠滿足鈣鎂等堿土金屬的深度去除。通常采用離子交換工藝實現鈣離子、鎂離子的去除,以提升碳酸鋰的品質,但是國產樹脂在此行業應用中存在的使用量過大的問題,會導致設備造價偏高、廢水量太大&#…

C++二分向量算法:最多可以參加的會議數目 II

本題的其它解法 C二分算法:最多可以參加的會議數目 II 本文涉及的基礎知識點 二分查找算法合集 題目 給你一個 events 數組,其中 events[i] [startDayi, endDayi, valuei] ,表示第 i 個會議在 startDayi 天開始,第 endDayi …

gitt開源項目的意義,公司為什么會對在gitt上有開源項目的人更大機會

Git是一種分布式版本控制系統,它可以幫助程序員管理代碼的歷史版本和協同工作。同時,Git也成為了開源項目的主要托管平臺之一。Git的開源項目意義重大,因為這種開源項目托管平臺可以幫助開發者將代碼和項目分享給全球的開發者,并且…

從0開始學習JavaScript--JavaScript元編程

JavaScript作為一門靈活的動態語言,具備強大的元編程能力。元編程是一種通過操作程序自身結構的編程方式,使得程序能夠在運行時動態地創建、修改、查詢自身的結構和行為。本文將深入探討JavaScript中元編程的各個方面,包括原型、反射、代理等…

2023亞太杯數學建模C題思路模型代碼

已完成C題思路代碼,文末名片獲取 C題是我們的一個數據分析問題,這個題目主要就是我們要去收集數據,清洗處理后進行分析。 問題1:分析影響中國新能源電動汽車發展的主要因素,建立數學模型,描述這些因素對中…

對未來新能源車測試工具的看法

汽車行業正在經歷變革的說法算是比較輕描淡寫的了,還記得我1983年加入這個行業時,行業聚焦點是引入發動機管理系統。當時還是以家庭掀背車為主的時代,發動機分析儀的體積像衣柜一樣大,還沒出現“CAN”通信協議。現在經常聽到我的導…

PHP預約上門回收廢品系統的代碼披露

PHP預約上門回收廢品系統的代碼披露 <?phpnamespace app\admin\controller;class Code {public function getTopDomainhuo(){error_reporting(0);$host $_SERVER["HTTP_HOST"];$matchstr "[^\\.]\\.(?:(" . $host . ")|\\w{2}|((" . $ho…

【第一部分:概述】ARM Realm Management Monitor specification

目錄 概述機密計算系統軟件組成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 參考文獻 概述 RMM是一個軟件組件&#xff0c;它構成了實現ARM…

機器學習筆記 - 復雜任務的CNN組合

基礎CNN架構可通過多種方式進行組合和擴展,從而解決更多、更復雜的任務。 1. 分類和定位 在分類和定位任務中,你不僅需要說出在圖像中找到的物體的類別,而且還需指出物體顯現在圖像中的邊界框坐標。這類任務假設在圖像中只有一個物體實例。 這個任務可通過在典型的分類網絡…

每日一題(LeetCode)----鏈表--兩數相加

每日一題(LeetCode)----鏈表–兩數相加 1.題目&#xff08;2. 兩數相加&#xff09; 給你兩個 非空 的鏈表&#xff0c;表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的&#xff0c;并且每個節點只能存儲 一位 數字。 請你將兩個數相加&#xff0c;并以相同形式返…

深入ReentrantReadWriteLock(一)

一、為什么要出現讀寫鎖 synchronized和ReentrantLock都是互斥鎖。 如果說有一個操作是讀多寫少的&#xff0c;還要保證線程安全的話。如果采用上述的兩種互斥鎖&#xff0c;效率方面很定是很低的。 在這種情況下&#xff0c;咱們就可以使用ReentrantReadWriteLock讀寫鎖去實現…

React16中打印事件對象取不到值的現象及其原因分析

React16中打印事件對象取不到值的現象及其原因分析 一、背景 在最近的開發過程中&#xff0c;遇到了一個看起來匪夷所思的問題?&#xff1a; <Inputplaceholder"請輸入"onChange{(e) > {console.log(e:, e)}}onKeyDown{handleKeyDown} />此時按理來說我…