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…

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

要讨论现货黄金卖出时机&#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…

注解校验备忘

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

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

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

2024年Android开发陷入饱和,想拿高工资

前言 从16年毕业至今&#xff0c;就职过两家公司&#xff0c;大大小小项目做了几个&#xff0c;非常感谢我的两位老大&#xff0c;在我的android成长路上给予我很多指导&#xff0c;亦师亦友的关系。 从年前至今参加面试了很多公司&#xff0c;也收到了几家巨头的offer&#…

2024Java大厂面试真题,java高级开发面试经验

概述 毫无疑问&#xff0c;Spring Cloud是目前微服务架构领域的翘楚&#xff0c;无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面&#xff0c;其底层的很多原理&#xff0c;很多人可能并不知晓。因此本文将通过大量的手绘图&#xff0c;…

一次线上JVM GC 长暂停排查,加班搞了好久

给大家分享一篇我在知乎上看到的&#xff0c;针对长时间 GC 问题排查定位过程的文章。 最终原因定位到 swap 空间上&#xff0c;是我未曾设想过的角度&#xff0c;因为常规的 GC 问题&#xff0c;相当大一部分原因最终定位出来都是代码相关、流量相关、配置相关的&#xff0c;…

需求并行开发场景,如何高效发布

云布道师 微服务架构下&#xff0c;每个应用服务独立开发、独立发布&#xff0c;小步快跑&#xff0c;持续快速交付业务需求。多人协同开发同一个应用时&#xff0c;分支开发模式是一个适合的协同方案。该模式下一个需求或任务通常对应一个 feature 分支&#xff0c;多个需求一…

WSL2安装+深度学习环境配置

WSL2安装深度学习环境配置 1 安装WSL22 配置深度学习环境1.1 设置用户名、密码1.2 安装cuda修改WSL安装路径 1.3 安装Anaconda 参考&#xff1a;搭建Windows Linux子系统&#xff08;WSL2&#xff09;CUDA环境 参考&#xff1a;深度学习环境配置 WindowsWSL2 1 安装WSL2 WSL …

《计算机程序的构造和解释》:计算思维的圣经,引领你走向编程的巅峰

写在前面 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发展和成熟产生了…