Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

news2024/12/22 18:19:57

上文我们已经学到,

  • 一个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.coloradmin.cn/o/887483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】实现顺序表

目录 一.介绍顺序表二.实现顺序表1.创建多文件2.顺序表的存储方式3.函数的声明4.初始化顺序表5.清理顺序表6.打印顺序表7.扩容8.尾插8.尾删9.头插10.头删11.查找12.修改13.在pos位置插入13.在pos位置删除 三.全部代码1.SeqList.h2.SeqList.c3.Test.c 一.介绍顺序表 顺序表是用…

【佳佳怪文献分享】使用点云从半监督到全监督房间布局估计

标题:From Semi-supervised to Omni-supervised Room Layout Estimation Using Point Cloud 作者:Huan-ang Gao, Beiwen Tian, Pengfei Li, Xiaoxue Chen, Hao Zhao, Guyue Zhou , Yurong Chen and Hongbin Zha 来源:2023 IEEE Internation…

Android系统-线程-消息处理机制

引言: Android应用消息处理机制是怎么样的呢? 跟Native,Linux底层都有些什么关系呢? 概念与理解: Android应用程序是通过消息来驱动的。 1)应用程序的每一个线程在启动的时候,都可以首先在内…

Swagger-ui在idea中的使用

1.添加依赖 <!--添加swagger2相关概念--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--添加swagger-ui相关功能--><de…

【贪心+堆】CF1701 D

Problem - 1701D - Codeforces 题意&#xff1a; 思路&#xff1a; 手推样例可知&#xff1a; 一开始想的是&#xff0c;把这些区间按右端点排序&#xff0c;然根据排序后的贪心 事实上不是这样的&#xff0c;而是要把有可能的区间扔进堆里&#xff1a; 感觉这种带堆的贪心&…

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总

【TI-CCS笔记】工程编译配置 bin文件的编译和生成 各种架构的Post-build配置汇总 TI编译器分类 在CCS按照目录下 有个名为${CG_TOOL_ROOT}的目录 其下就是当前工程的编译器 存放目录为&#xff1a; C:\ti\ccs1240\ccs\tools\compiler按类型分为五种&#xff1a; ti-cgt-arm…

J‘meter 连接 MySQL 数据库脚本

1、创建线程组 2、创建 JDBC Connection Configuration 3、创建 JDBC Request 4、最终创建的目录 5、重点来了 5.1 在百度中下载个 MySQL-connector-Java-8.0.28.jar&#xff0c;放在 jmeter 的 bin 目录下 5.2 在测试计划中&#xff0c;将 jar 包添加到脚本中 5.3 输入参…

如何查看mysql中各个表的数据大小

1.SHOW VARIABLES LIKE datadir; 这会显示 MySQL 数据目录的路径。在这个路径下&#xff0c;你可以找到每个数据库的文件夹&#xff0c;每个数据库文件夹中会包含各个表的 .ibd 文件。 2.进入对应的目录 3.进入对应的db&#xff0c;例如我自己的db为test 4.如果我们想以M为单…

在Gazebo中添加悬浮模型后,利用键盘控制其移动方法

前段时间写了文章&#xff0c;通过修改sdf、urdf模型的方法&#xff0c;在Gazebo中添加悬浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;在Gazebo中添加悬浮模型方法 / Gazebo中模型如何不因重力下落&#xff1a;修改sdf、urdf模型_sagima_sdu的博客-CSDN博客 今天讲…

2401. 最长优雅子数组;1111. 有效括号的嵌套深度;2134. 最少交换次数来组合所有的 1 II

2401. 最长优雅子数组 核心思想&#xff1a;滑动窗口。如何知道当前值与以前的值是否and为0很重要&#xff0c;这是这道题目的关键&#xff0c;and操作会把1变成0&#xff0c;但是不会把0变成1&#xff0c;所以当前值x要和前面的值两两and为0意味着&#xff0c;你要使前面的值…

Vim的插件管理器之Vundle

1、安装Vundle插件管理器 Vim可以安装插件&#xff0c;但是需要手动安装比较麻烦&#xff0c;Vim本身没有提供插件管理器&#xff0c;所以会有很多的第三方的插件管理器&#xff0c;有一个vim的插件叫做 “vim-easymotion”&#xff0c;在它的github的安装说明里有列出对于不同…

比ChatGPT更强的星火大模型V2版本发布!

初体验 测试PPT生成 结果&#xff1a; 达到了我的预期&#xff0c;只需要微调就可以直接交付&#xff0c;这点比ChatGPT要强很多. 测试文档问答 结果&#xff1a; 这点很新颖&#xff0c;现在类似这种文档问答的AI平台收费都贵的离谱&#xff0c;星火不但免费支持而且效果也…

vue项目报错:node:internal/modules/cjs/loader:1080

运行项目报错&#xff1a; 原因&#xff1a; 看划线的地方&#xff0c;中文乱码导致找不见模块了 解决方案 将路径上的中文改为英文即可&#xff0c;项目命名最好只有英文、下划线&#xff08;_&#xff09;、数字、横杠&#xff08;-&#xff09;等英文符号组成

MATLAB图形窗口固定

起因是上次作图的时候写了&#xff1a; clc clear close all 这三个典型的刷新语句 清空工作区、命令行并且关闭图窗 就导致每次我把图窗拉到合适的位置观察&#xff0c;再一次点击运行都会重新刷新在出生点&#xff08;x&#xff09; 所以想把图窗固定在某个位置 显然更…

解决爬虫上下行传输效率问题的实用指南

嗨&#xff0c;大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我们经常会面临上下行传输效率低下的问题。在处理大量数据时&#xff0c;如果传输效率不高&#xff0c;可能会导致爬虫任务速度慢&#xff0c;甚至中断。今天&#xff0c;我将和大家分享一些解决爬虫上下…

深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)

目录 深度优先搜索&#xff08;DFS、深搜&#xff09;和广度优先搜索&#xff08;BFS、广搜&#xff09; 深度优先搜索&#xff08;简称“深搜”或DFS&#xff09; 广度优先搜索 总结 深度优先生成树和广度优先生成树 非连通图的生成森林 深度优先生成森林 广度优先生成…

Python系统学习1-9-类(一)

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

人工智能原理(5)

目录 一、不确定性推理 1、不确定性推理含义 2、知识不确定性的来源 3、不确定推理要解决的基本问题 4、不确定性推理方法分类 二、主观贝叶斯方法 1、主观贝叶斯方法 2、知识不确定性的表示 3、证据 4、不确定性的更新 三、可信度方法 1、可信度模型 2、性质 3、…

RK3588平台开发系列讲解(AI 篇)RKNN C API 详细说明

文章目录 一、API 硬件平台支持说明二、API 函数介绍2.1、rknn_init2.2、rknn_destroy2.3、rknn_query2.4、rknn_inputs_set2.5、rknn_run2.6、rknn_outputs_get2.7、rknn_outputs_release沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解 RKNN C API 详细…

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…