從0開始帶你成為Kafka消息中間件高手---第三講

從0開始帶你成為Kafka消息中間件高手—第三講

實際上來說,每次leader接收到一條消息,都會更新自己的LEO,也就是log end offset,把最后一位offset + 1,這個大家都能理解吧?接著各個follower會從leader請求同步數據,這是持續進行的

offset = 0 ~ offset = 4,LEO = 5,代表了最后一條數據后面的offset,下一次將要寫入的數據的offset,LEO,你一定要明白他的名詞

然后follower同步到數據之后,就會更新自己的LEO

并不是leader主動推送數據給follower,他實際上是follower主動向leader嘗試獲取數據,不斷的發送請求到leader來fetch最新的數據

然后對于接收到的某一條數據,所有follower的LEO都更新之后,leader才會把自己的HW(High Water Mark)高水位offset + 1,這個高水位offset表示的就是最新的一條所有follower都同步完成的消息

partition中最開始的一條數據的offset是base offset

LEO和HW分別是干什么的呢?

LEO很重要的一個功能,是負責用來更新HW的,就是如果leader和follower的LEO同步了,此時HW就可以更新

所有對于消費者來說,他只能看到base offset到HW offset之間的數據因為只有這之間的數據才表明是所有follower都同步完成的,這些數據叫做“已提交”的,也就是committed,是可以被消費到的

HW offset到LEO之間的數據,是“未提交的”,這時候消費者是看不到的

HW offset表示的是當前已經提交的數據offset,LEO表示的是下一個要寫入的數據的offset
在這里插入圖片描述

首先leader接收到數據字后就會更新自己的LEO值

接著follower會不斷的向leader發送fetch請求同步數據,然后每次一條數據同步到follower之后,他的LEO就會更新,同時leader發送數據給follower的時候,在leader端會維護所有follower的LEO值

follower發送fetch請求給leader的時候會帶上自己的LEO值,然后leader每次收到一個fetch請求就會更新自己維護的每個follower的LEO值

所以這里大家要知道的是,leader上是會保存所有follower的LEO值的,這個是非常關鍵和核心的一點
在這里插入圖片描述

每次leader發送數據給follower的時候,都會發送自己的HW值,然后follower獲取到leader HW之后,就會跟自己的LEO比較一下,取里面小的那個值作為自己的HW值,換句話說,如果follower的LEO比leader HW大了,那么follower的HW就是leader HW

但是如果follower的LEO比leader HW小,說明自己明顯落后于leader,那么follower的HW就是自己的LEO值

然后leader上的HW就很明顯了,那就是主要是他在接收follower的fetch請求的時候,就會在更新自己維護的所有follower的LEO之后,判斷一下當前自己的LEO是否跟所有follower都保持一致,那么就會自動更新自己的HW值

這個leader的HW值就是partition的HW值,代表了從這個partition的哪個offset之前可以被消費數據
在這里插入圖片描述
假設leader收到第一條數據,此時leader LEO = 1,HW = 0,因為他發現其他follower的LEO也是0,所以HW必須是0

接著follower來發送fetch請求給leader同步數據,帶過去follower的LEO = 0,所以leader上維護的follower LEO = 0,更新了一下,此時發現follower的LEO還是0,所以leader的HW繼續是0

接著leader發送一條數據給follower,這里帶上了leader的HW = 0,因為發現leader的HW = 0,此時follower LEO更新為1,但是follower HW = 0,取leader HW

接著下次follower再次發送fetch請求給leader的時候,就會帶上自己的LEO = 1,leader更新自己維護的follower LEO = 1,此時發現follower跟自己的LEO同步了,那么leader的HW更新為1

接著leader發送給follower的數據里包含了HW = 1,此時follower發現leader HW = 1,自己的LEO = 1,此時follower的HW有更新為1

5個數據:全部都要往前推進更新,需要2次請求,第一次請求是僅僅是更新兩邊的LEO,第二次請求是更新另外leader管理的follower LEO,以及兩個HW
在這里插入圖片描述

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

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

相關文章

k8s 中svc映射的外部端口是如何監聽的,netstat命令為什么查不到?

在Kubernetes中,Service(服務)是一種抽象,用于將一組Pod(容器)公開為一個網絡服務。Service可以通過ClusterIP(集群內部IP)、NodePort(節點端口)或LoadBalanc…

KDD 2024|基于隱空間因果推斷的微服務系統根因定位

簡介:本文介紹了由清華大學、南開大學、eBay、微軟、中國科學院計算機網絡信息中心等單位共同合作的論文《基于隱空間因果推斷的受限可觀測性場景的微服務系統根因定位》。該論文已被KDD 2024會議錄用。 論文標題:Microservice Root Cause Analysis Wit…

10年老運營人吐血整理,給新媒體運營人的20條建議!沈陽新媒體運營培訓

對于企業,在新媒體平臺開設官方賬號應該是已經成為標配。不僅是對企業新媒體運營需求量提高,新媒體人的薪資也是水漲船高。 另外值得注意的是,企業對資深新媒體運營人才尤為重視,這表現在他們不惜重金招聘高薪新媒體運營人才&…

Linux新增磁盤掛載分區

1. 查看磁盤分區名稱 lsblk 可見,新增的分區為 sdb 2.格式化磁盤 mkfs.xfs -f /dev/sdb 3.掛在磁盤到 /ocean目錄,掛在前先創建空目錄 /ocean mkdir /oceanmount /dev/sdb /ocean 執行后,可用 df -h 查看分區是否成功 4.持久化磁盤分區&a…

查詢MongoDB中某個數據庫的占用空間大小

要查詢MongoDB中某個數據庫的占用空間大小,可以使用以下幾種方法: 方法一:使用 MongoDB Shell (mongo) 1. **連接到 MongoDB**: bash mongo 2. **選擇數據庫**: javascript use yourDatabaseName …

AI推介-大語言模型LLMs論文速覽(arXiv方向):2024.05.20-2024.05.25

文章目錄~ 1.STRIDE: A Tool-Assisted LLM Agent Framework for Strategic and Interactive Decision-Making2. M 3 M^3 M3GPT: An Advanced Multimodal, Multitask Framework for Motion Comprehension and Generation3.MindStar: Enhancing Math Reasoning in Pre-trained LL…

計算機圖形學入門03:二維變換

變換(Transformation)可分為模型(Model)變換和視圖(Viewing)變換。在3D虛擬場景中相機的移動和旋轉,角色人物動畫都需要變換,用來描述物體運動。將三維世界投影變換到2D屏幕上成像出來,也需要變換。 1.縮放變換 縮放(Scale)變換: …

【B站 heima】小兔鮮Vue3 項目學習筆記 Day06

文章目錄 購物車本地1. 列表購物車基礎數據渲染2. 列表購物車單選功能3. 列表購物車全選功能4. 列表購物車統計列表實現5. 接口-加入購物車6. 接口-刪除購物車7. 退出登錄-清空購物車數據8. 合并購物車到服務器(重要) 結算1. 路由配置和基礎數據渲染2. 地址切換-打開彈框交互實…

跨境人必讀:X(原Twitter)和Facebook區別是什么?

在今日全球化的商業環境中,跨境電商領域的企業和獨立站賣家正逐漸認識到社交媒體營銷的巨大潛力。特別是X(原Twitter)和Facebook,作為領先的社交媒體平臺,它們的使用不僅能夠提升品牌知名度,還能直接影響銷…

基于Java實現的圖書管理系統

前言:該圖書管理系統實現了查找、添加、刪除、顯示、借閱、歸還等功能,分為兩個用戶群體:管理者和普通用戶。使用了類與對象,封裝繼承多態,抽象類和接口等Java基礎知識。 一.思路 面向對象三部曲:找對象&…

oracle數據庫查看各類文件的位置

select name from v$controlfile; --控制文件 (一般以.ctl結尾) select file_name from dba_data_files; --數據文件 (一般以.dbf或.ora結尾) select file_name from dba_temp_files; --臨時文件(一般以.d…

OrangePi_Kunpeng_Pro開發板測驗——性能巨人

文章目錄 📑前言一、開箱初體驗的愉悅二、產品規格概述三、前置工作四、性能測試4.1 CPU 性能測試4.1.1 單線程 CPU 測試4.1.2 多線程 CPU 測試 4.2 內存性能測試4.2.1 內存讀寫性能測試4.2.2 高負載內存測試 4.3 I/O 性能測試4.4 網絡性能測試4.5 測試小結4.5.1 CP…

ECMAScript簡介

前言 ECMAScript(通常簡稱為ES)由ECMA國際標準化組織制定的一種腳本語言標準,Netscape最初開發的JavaScript演變而來。ECMAScript為JavaScript提供了基礎語言結構和功能。最初設計成一種腳本語言,用來服務Web。作為腳本語言ES同時…

CF1148C C. Crazy Diamond

題目鏈接 題意&#xff1a;給定一個數組p長度為n按照規則對下標滿足2 * abs(i - j) > n進行交換&#xff0c;最后使數組不遞減。輸出用的交換次數和每次交換的下標。&#xff08;交換次數不能超過5*n次&#xff09; 題解&#xff1a; 默認i < j,否則交換 abs(i - j) &…

基于異構圖的大規模微服務系統性能問題診斷

簡介&#xff1a;本文介紹由南開大學、清華大學、騰訊、國家超級計算天津中心共同合作的論文&#xff1a;基于異構圖的大規模微服務系統性能問題診斷。該論文已被IEEE Transactions on Services Computing期刊錄用 論文標題&#xff1a;Diagnosing Performance Issues for Lar…

docker刪除所有容器

筆記 要使用 Docker 刪除所有容器&#xff08;無論是停止的還是正在運行的&#xff09;&#xff0c;可以按照以下步驟操作&#xff1a; 1. **刪除所有正在運行的容器**&#xff1a; 首先&#xff0c;您需要停止所有正在運行的容器。可以使用以下命令&#xff1a; dock…

MATLAB分類與判別模型算法:K-近鄰法(KNN)分類代碼 【含Matlab源碼 MX_001期】

算法簡介&#xff1a; K-近鄰法&#xff08;KNN&#xff09;是一種簡單而有效的分類算法&#xff0c;也可用于回歸問題。它的基本原理是根據待分類樣本與訓練樣本的距離&#xff0c;選取最近的K個樣本進行投票決定分類。該算法無需訓練過程&#xff0c;而是利用訓練數據集直接…

數據結構與算法-反轉單鏈表

數據結構與算法-反轉單鏈表 大家好&#xff0c;歡迎回到我們的算法學習系列。今天&#xff0c;我們將探討一個在算法面試中非常經典的問題——反轉單鏈表。 什么是單鏈表&#xff1f; 在介紹問題之前&#xff0c;我們先簡單了解一下單鏈表。單鏈表是一種線性數據結構&#x…

氣缸前端鎖緊技術探討:從四個方面、五個方面、六個方面和七個方面深度解析

氣缸前端鎖緊技術探討&#xff1a;從四個方面、五個方面、六個方面和七個方面深度解析 在工業自動化領域&#xff0c;氣缸作為關鍵的執行元件&#xff0c;其前端鎖緊技術的穩定性與可靠性直接影響到整個系統的運行效率。本文將從四個方面、五個方面、六個方面和七個方面&#…

python 面對對象 類 補充

isinstance isinstance()&#xff1a;判斷一個實例化對象是否屬于這個類的&#xff0c;isinstance(對象&#xff0c;類) class Man():passclass Women():passa Man()print(isinstance(a, Man)) # True print(isinstance(a, Women)) # False 類的屬性操作 getattr() 獲…