Kafka 入門到起飛 - 什么是 HW 和 LEO?何時更新HW和LEO呢?

上文我們已經學到,

  • 一個Topic(主題)會有多個Partition(分區)
  • 為了保證高可用,每個分區有多個Replication(副本)
  • 副本分為Leader 和 Follower 兩個角色,Follower 從Leader同步數據
  • Leader副本對外提供讀寫服務
  • 當Leader副本掛掉,從ISR中選一個Follower副本成為新的Leader對外繼續提供服務
  • 那么就要保證分區各副本間數據一致性

在這里插入圖片描述

  • 已提交,Leader副本已經被Follower 都同步的消息
  • 未提交,Leader已經寫入,還沒有被Follower同步的消息
  • 對消費者而言,已提交的消息都可以拿到
  • Leader 和 Follower副本上都有HW 和 LEO
  • Leader副本除了自己的LEO,還存Follower的LEO

HW (High WaterMarker) 高水位

在這里插入圖片描述

高水位可以理解為一個橫切面,拉齊分區所有副本已經寫入的消息,保證HW前的消息你有我有全都有啊,水桶原理
這里要注意,所有副本指的是ISR列表中的同步副本,OSR中同步慢的副本不管

LEO (Log End Offset) 日志末端位移

就是分區該副本下一個消息寫入的位移(offset),當前副本最后一條消息的位移是13,下一個消息寫入14位置

Follower 副本何時更新LEO呢?

在這里插入圖片描述

  • 對于Leader副本來說,每次寫入消息,都會更新LEO的值
  • Follower 副本不停地向Leader副本發送Fetch請求,一旦獲取數據后就寫入日志文件中進行備份,同時更新LEO值
  • 其實Follower跟Leader一樣,寫入數據時更新自己的LEO值

那么Leader 端的Follower的LEO 什么時候更新呢?

  • 當Leader接收到Follower發起的Fetch請求
  • 先從Log文件中讀取數據
  • 先更新Leader中存儲的Follower的LEO
  • 再將數據返回給Follower
  • 這里會不會存在Leader更新了Follower的LEO,但是Follower實際并沒有收到返回的消息,而造成Follower 所在broker 和 Leader所在broker存的LEO值不一致呢?

Follower 何時更新HW呢?

在這里插入圖片描述

  • Follower寫入數據后,會更新自己的LEO值,然后就嘗試更新自己的HW值
  • HW值是怎么算的呢?
  • 是根據自己當前LEO值與Leader返回的HW值比較,去較小值作為HW更新
  • 這很好理解,Leader中記錄的HW是所有副本HW最小的值,也就是同步最慢的那個副本的LEO,每個副本都需要知道這個事,自己不是最小那就記別人的值

Leader 何時更新HW呢?

  • Leader中存儲的HW就是整個分區的HW,直接影響消息對消費者的可見性
  • Leader更新HW有4中情況
    • Leader接收生產者發送過來的消息,寫入文件后,檢查是否需要更新HW
    • Follower副本選舉成為新的Leader是,Kafka會嘗試去更新分區HW
    • Broker崩潰,導致副本被踢出ISR,Kafka會檢查分區HW是否有被更新的必要
    • Leader處理Follower的Fetch請求是,先從Log讀取數據,然后嘗試跟新HW值
  • 正常情況下就是2種: leader處理producer請求,leader處理follower的fetch請求

Leader 的HW值是怎么更新的呢?

  • 先選出所有滿足條件的副本,ISR同步副本
  • 比較它們的LEO(包括leader的LEO)
  • 選擇最小的LEO值作為HW

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

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

相關文章

爬蟲逆向實戰(十八)--某得科技登錄

一、數據接口分析 主頁地址:某得科技 1、抓包 通過抓包可以發現數據接口是AjaxLogin 2、判斷是否有加密參數 請求參數是否加密? 查看“載荷”模塊可以發現有一個password加密參數和一個__RequestVerificationToken 請求頭是否加密? 無…

【Linux】Reactor模式

Reactor模式 Reactor模式的定義 Reactor反應器模式,也叫做分發者模式或通知者模式,是一種將就緒事件派發給對應服務處理程序的事件設計模式。 Reactor模式的角色構成 Reactor主要由以下五個角色構成: reactor模式的角色 角色解釋Handle(句…

保姆級別講解Python數據處理,你絕對能會

名字:阿玥的小東東 學習:Python、C/C 主頁鏈接:阿玥的小東東的博客_CSDN博客-python&&c高級知識,過年必備,C/C知識講解領域博主 目錄 1. 文件讀取 2. 數據處理 3. 處理結果輸出 總的來說 為了咱們讓程序跑起來,我們需…

DAY3,ARM(LED點燈實驗)

1.匯編實現開發板三盞燈點亮熄滅&#xff1b; .text .global _start _start: /**********LED123點燈**************/RCC_INIT:1使能PE10 PF10 PE8RCC..寄存器,E[4]1 F[5]1 0x50000a28ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x3 << 4)str r1,[r0]LED1_INET:2初始化LED…

酷開系統 | 酷開科技大數據,更好的與目標消費人群建立聯系

眾所周知&#xff0c;OTT的一大優勢在于強曝光&#xff0c;能夠給消費者帶來強烈的視覺沖擊&#xff0c;強化品牌認知。但是&#xff0c;要想達到提升品牌認知&#xff0c;首先要保證OTT的流量規模&#xff0c;實現對目標人群的有效覆蓋。得年輕消費者得“天下”&#xff0c;年…

tk切換到mac的code分享

文章目錄 前言一、基礎環境配置二、開發軟件與擴展1.用到的開發軟件與平替、擴展情況 總結 前言 最近換上了coding人生的第一臺mac&#xff0c;以前一直偏好tk&#xff0c;近來身邊的朋友越來越多的用mac了&#xff0c;win的自動更新越來越占磁盤了&#xff0c;而且win11拋棄了…

vue elementui v-for 循環el-table-column 第一列數據變到最后一個

這個動態渲染table表格時發現el-table-column 第一列數據變到最后一個 序號被排到后面 代碼 修改后 <el-table:data"tableData"tooltip-effect"dark"style"width: 100%"height"500"><template v-for"(item, index) i…

PostCSS在vue中的使用

1、安裝 PostCSS 和所需的插件。在命令行中運行以下命令&#xff1a; npm install postcss autoprefixer cssnano postcss-pxtorem --save-dev 這將安裝 PostCSS、Autoprefixer、CSSnano 和 postcss-pxtorem 插件&#xff0c;同時將它們添加到項目的開發依賴中。 2、在項目根目…

每天一道leetcode:1926. 迷宮中離入口最近的出口(圖論中等廣度優先遍歷)

今日份題目&#xff1a; 給你一個 m x n 的迷宮矩陣 maze &#xff08;下標從 0 開始&#xff09;&#xff0c;矩陣中有空格子&#xff08;用 . 表示&#xff09;和墻&#xff08;用 表示&#xff09;。同時給你迷宮的入口 entrance &#xff0c;用 entrance [entrancerow, …

SpringBoot的配置文件(properties與yml)

文章目錄 1. 配置文件的作用2. 配置文件格式3. 配置文件的使用方法3.1. properties配置文件3.1.1. 基本語法和使用3.1.2. properties優缺點分析 3.2. yml配置文件3.2.1. 基本語法與使用3.2.2. yml中單雙引號問題3.2.3. yml配置不同類型的數據類型及null3.2.4. 配置對象3.2.5. 配…

android設置豎屏仍然跟隨屏幕旋轉怎么辦

如題所問&#xff0c;我最近遇到一個bug&#xff0c;就是設置了搖感&#xff0c;然后有用戶反饋說設置了手機下拉的系統設置-屏幕旋轉-關閉。然后屏幕還是會旋轉的問題。 首先&#xff0c;我們先從如何設置橫豎屏了解下好了 設置橫屏和豎屏的方法&#xff1a; 方法一&#x…

uni-app引入sortable列表拖拽,兼容App和H5,拖拽排序。

效果: 拖拽排序 背景&#xff1a; 作為一名前端開發人員&#xff0c;在工作中難免會遇到拖拽功能&#xff0c;分享一個github上一個不錯的拖拽js庫&#xff0c;能滿足我們在項目開發中的需要&#xff0c;下面是我在uniapp中使用SortableJS的使用詳細流程&#xff1b; vue開發…

Centos7安裝docker后默認開啟docker0的網卡|卸載默認網卡

一&#xff1a; 停掉服務 systemctl stop docker [rootwww ~]# systemctl stop docker [rootwww ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor prese…

神經網絡基礎-神經網絡補充概念-27-深層網絡中的前向傳播

概念 深層神經網絡中的前向傳播是指從輸入數據開始&#xff0c;逐層計算每個神經元的輸出值&#xff0c;直到得到最終的預測值。 一般步驟 1輸入數據傳遞&#xff1a; 將輸入數據傳遞給網絡的輸入層。輸入數據通常是一個特征矩陣&#xff0c;每一列代表一個樣本&#xff0c;…

【bug】Unity無法創建項目

bug UnityHub無法創建項目 UnityHub無法創建項目 出現的問題&#xff1a;在創建新項目時彈出來一個 無法創建項目 嘗試的方法&#xff1a; 刷新許可證 ?沒用退出賬號重新登陸 ?沒用重啟電腦 ?沒用 最后發現是什么問題呢&#xff1f; 2021.3.3這個版本我之前在資源管理器中…

SpringBoot概述及項目的創建使用

文章目錄 一. Spring Boot概述1. 什么是Spring Boot&#xff1f;2. Spring Boot的優點 二. Spring Boot項目的創建1. 使用IDEA創建1.1. 準備工作1.2. 創建運行Spring Boot項目1.3. 進行Web交互1.4. 目錄工程介紹1.5. 項目快速添加依賴1.6. 防止配置文件亂碼所需的配置1.7. Spri…

Docker實戰專欄簡介

&#x1f337;&#x1f341; 博主貓頭虎 帶您 Go to New World.?&#x1f341; &#x1f984; 博客首頁——貓頭虎的博客&#x1f390; &#x1f433;《面試題大全專欄》 文章圖文并茂&#x1f995;生動形象&#x1f996;簡單易學&#xff01;歡迎大家來踩踩~&#x1f33a; &a…

【iMessage蘋果推?IM推送】群控腳本當Apple APNS推送服務器從您的應用程序接吸收注冊消息時,它將為您回到一串devicetoken

推薦內容IMESSGAE相關 作者??IMEAE推薦內容iMessage蘋果推軟件 *** 點擊即可查看作者要求內容信息作者??IMEAE推薦內容1.家庭推內容 *** 點擊即可查看作者要求內容信息作者??IMEAE推薦內容2.相冊推 *** 點擊即可查看作者要求內容信息作者??IMEAE推薦內容3.日歷推 *** …

Rust軟件外包開發語言的特點

Rust 是一種系統級編程語言&#xff0c;強調性能、安全性和并發性的編程語言&#xff0c;適用于廣泛的應用領域&#xff0c;特別是那些需要高度可靠性和高性能的場景。下面和大家分享 Rust 語言的一些主要特點以及適用的場合&#xff0c;希望對大家有所幫助。北京木奇移動技術有…

MongoDB:簡單的增刪改查操作

一.概述 本篇文章介紹在Navicat中對MongoDB數據庫進行增刪改查操作,在后面會介紹在Spring Boot中使用MongoTemplate對MongoDB數據庫進行相關操作.如有必要可以先看看前面幾篇文章. MongoDB:MySQL,Redis,ES,MongoDB的應用場景 MongoDB:數據庫初步應用 二.在Navicat進行增刪改…