kafka高水位和leader epoch

什么是高水位?

        高水位表示分区下副本消息到哪里是算正常提交的。比如如下图:leader副本写到8了,follower副本也写到8,那么这个8就代表要求的副本都写入了。消息到8这里才算提交成功,后面的15写入了也不算提交成功,消费端只能看到8以前的数据。只有要求的副本都写入15后,高水位才会变为15。所以也可以说高水位表示消息的可见性。

        后面的LEO表示当前副本消息的最后日志位置,高水位(HW)和LEO结合才能完成副本的同步。

具体怎么同步的?

        leader副本上存有当前副本的高水位和LEO和其他副本的LEO。我们用发送一条消息举例。

leader副本

follower副本

HW=2HW=2
LEO=2LEO=2
其他副本的LEO=2

        1,当leader副本写入一条日志后,HW=2,LEO=3,其他副本LEO=2,这个时候follower会按自己的LEO=2来拉取数据。那么他可以拉取到LEO的数据。如下图的这么一个状态:

leader副本

follower副本

HW=2HW=2
LEO=3LEO=3
其他副本的LEO=2

        2,这时follower又来拉取数据了,按当前LEO=3来拉取数据。leader则知道他的LEO=3了,则更新其他副本的LEO=3。leader判断所有副本的LEO都是3时,则更新HW=3。

leader副本<1,1>

follower副本<1,1>

HW=3HW=2
LEO=3LEO=3
其他副本的LEO=3

        3,leader然后将HW值下发给其他副本,其他副本更新自己HW=1。

leader副本

follower副本

HW=3HW=3
LEO=3LEO=3
其他副本的LEO=3

        通过上面的这3个步骤来实现消息的同步。但是第3步可能会发送失败,这就会造成leader的HW=3了,但是其他副本还是HW=2。这个时候leader副本挂了,其他副本会选举新的leader。那么HW又变为2了,等老副本重启后也会变成follower去请求数据,也会将自己HW从3变更为2。这就造成了消息丢失。为了解决该问题,引入了leader epoch机制来判断日志是否需要截取。我更愿意叫他领导者版本。

领导者版本:

        <递增的版本号,该版本号下第一条写入的数据位置>。kafka会缓存该值。一个领导者写入的第一条数据,上面例子中该值就应该等于<1,1>。

        还是用上面举例子。如果leader副本挂了,follower副本被推举为新leader。那么他会看当前版本号对应的位置为<1,1>,自己HW=2,LEO=3,1<=3,3需要保留。更新HW=3。只有当版本号对应位置大于自己时才需要截断自己的位置。比如<1,4>那么自己LEO=3,明显自己落后了,需要将数据截断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723839.shtml

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

相关文章

【Leetcode 2673】使二叉树所有路径值相等的最小代价 —— 贪心法

2673. 使二叉树所有路径值相等的最小代价 给你一个整数n表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从1到n。根节点编号为1&#xff0c;树中每个非叶子节点i都有两个孩子&#xff0c;分别是左孩子2 * i和右孩子2 * i 1。 树中每个节点都有一个值&#xff0c;用下…

Vscode C/C++ 编译问题

1.最近开始在VScode上编写程序&#xff0c;遇到了以下的坑 This may occur if the process’s executable was changed after the process wasstarted, such as when installing an update. Try re-launching the application orrestarting the machine. 2.原因 这个不是由vs…

Java开发工程师面试题(JVM)

一、JVM调优常用命令和常用参数&#xff1a; 常用命令 jps&#xff1a;查看进程及其相关的信息。jmap&#xff1a;用来生成dump文件和查看堆相关的各类信息的命令。jstat&#xff1a;查看JVM运行时的状态信息。&#xff08;如jstat -gcutil可以查看gc发生的频率和次数&#x…

技术上的判断令你如何确定现货黄金卖出时机?

要讨论现货黄金卖出时机&#xff0c;我们首先要搞清楚一个问题&#xff0c;就是开仓和平仓的问题&#xff0c;如果投资者已经成了市场中的多头&#xff0c;那他寻找的卖出时机就是要找多头平仓的时机&#xff0c;如果投资者还没开仓&#xff0c;正在寻找市场中的开仓机会&#…

【RS】最新欧空局Sentinel-2卫星数据下载(哨兵1、2、3、5P、6系列)

之前分享过Sentinel2数据下载的方法&#xff0c;但是有粉丝反应欧空局的网站更新了&#xff0c;之前的网站已经不能用了。所以自己抽空研究了一下新版的欧空局网站&#xff0c;今天就和大家分享一下如何使用新版的欧空局网站下载哨兵系列的卫星数据&#xff0c;本文以Sentinel2…

c语言-大小写字母的转换

目录 方法一&#xff1a;库函数直接转换 1、toupper的测试代码 2、tolower的测试代码 方法二&#xff1a;通过修改ASCII码值转换 1、自己实现大写转小写 2、自己实现小写转大写 结语 前言&#xff1a; 在使用c语言写代码时&#xff0c;通常会遇到很多将大小写字母相互…

IP定位在公安部门的使用及其重要性

随着信息技术的迅猛发展&#xff0c;互联网已成为现代社会不可或缺的一部分。然而&#xff0c;与此同时&#xff0c;网络犯罪也呈现出日益猖獗的趋势&#xff0c;给社会治安带来了极大的挑战。在这样的背景下&#xff0c;IP定位技术在公安部门的应用显得尤为重要。本文将对IP定…

geoserver+mapbox-gl 离线部署矢量切片地图服务学习笔记

geoserver安装 geoserver的安装包可以在官网下载Download - GeoServer&#xff0c;想要选择版本点击Archived找到指定版本进行下载http://geoserver.org/download/ &#xff08;如果网络不稳定&#xff0c;也可以直接使用下面的下载地址&#xff09; geoserver-2.15.0.rar资…

手把手带你申请【Sora】内测资格,附申请提示词

自从OpenAI发布了Sora之后&#xff0c;由于其流畅的画面&#xff0c;极高的真实度的60秒超长视频&#xff0c;瞬间秒杀当前市面上所有的视频胜场模型。 附上体验地址&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 相信Sora发布之后也…

PRewrite: Prompt Rewriting with Reinforcement Learning

PRewrite: Prompt Rewriting with Reinforcement Learning 基本信息 2024-01谷歌团队提交到arXiv 博客贡献人 徐宁 作者 Weize Kong&#xff0c;Spurthi Amba Hombaiah&#xff0c;Mingyang Zhang 摘要 工程化的启发式编写对于LLM&#xff08;大型语言模型&#xff09;应…

uniapp 滑动页面至某个元素或顶部

直接上代码&#xff1a; uni.pageScrollTo({selector: #top, // 需要返回顶部的元素id或class名称duration: 300 // 过渡时间&#xff08;单位为ms&#xff09; }); 官方文档&#xff1a;

什么是云游戏?云游戏平台可以运行3A游戏吗?

对于不熟悉游戏行业的人来说&#xff0c;面对云游戏可能会有一个疑问——除了单机游戏&#xff0c;现在所有游戏不都是联网玩吗&#xff1f;云游戏和网络游戏有什么区别&#xff1f; 实际上&#xff0c;云游戏和传统网络游戏有着本质的不同。 传统网络游戏需要玩家先下载并在本…

工时管理软件:为什么企业需要工时跟踪?

工时跟踪对于企业经营来说&#xff0c;可能不是首要事项。工时跟踪有什么用&#xff1f; 管理学大师彼得德鲁克曾说过&#xff1a;If you can’t measure it, you can’t improve it&#xff08;如果无法衡量&#xff0c;就无法改进&#xff09;。企业经营也是同样道理&#x…

Linux运维_Bash脚本_编译安装CMake-3.28.3

Linux运维_Bash脚本_编译安装CMake-3.28.3 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux …

Unity 报错:SSL CA certificate error

使用UnityWebRequest时出现如下报错&#xff1a; SSL CA certificate error Curl error 60: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_USER_ERROR1 原因&#xff1a; 证书验证失败 和 SSL CA证书错误 解决方法&#xff1a; 创建一个如下的类&#xff1a; /// <…

注解校验备忘

NotNull 可用于一切包装类型 NotEmpty 用于String类型&#xff0c;表示不为空&#xff0c;并且长度大于0 用于List集合&#xff0c;表示不为空&#xff0c;并且size大于0 NotBlank 只用于字符串&#xff0c;去除两端空格后&#xff0c;长度大于0 Min和Max 包含当前值&a…

上传图片流

/** * 使用httpclint 发送文件&#xff0c;如果不传输文件&#xff0c;直接设置fileParamsnull&#xff0c; * 如果不设置请求头参数&#xff0c;直接设置headerParamsnull&#xff0c;就可以进行普通参数的POST请求了 * * param url 请求路径 * param fileParams 文件参数 * p…

Android 中为什么主线程不会因为 Looper.loop() 里的死循环卡死?

在 Android 中&#xff0c;主线程&#xff08;通常被称为 UI 线程或事件分发线程&#xff09;通过 Looper.loop() 方法进入一个无限循环&#xff0c;这个循环负责处理各种事件&#xff0c;如按钮点击、触摸事件、绘制请求等。尽管这是一个死循环&#xff0c;但它并不会导致主线…

基于Python dlib的人脸识别的上课考勤管理系统(V2.0)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

day49(vueJS)vue3的生命周期钩子 服务端渲染概念 vue3的组建通信 vue3的ref属性应用 vue3(vuex和pinia的使用)

vue3的生命周期钩子 服务端渲染概念 vue3的组建通信 vue3的ref属性应用 vue3&#xff08;vuex和pinia的使用&#xff09; vue3的生命周期钩子常规要点、总结代码演示 补充要点、总结 服务端渲染概念要点总结 vue3的组建通信要点总结父对子传值子对父传值跨层级组件传值 vue3的r…