kafka 入门到起飞 - 举个栗子一步一步说HW、LEO如何写入

news2025/1/4 19:36:03

在这里插入图片描述
举个简单栗子,如上图

  • replication.factory = 2 副本因子是2
  • 一个Leader副本,一个Follower副本
  • 初始情况Leader和Follower 副本都是空
  • 我们逐步看当producer写入消息时,
  • broker端的副本会做什么,副本的HW和LEO是如何被更新的

步骤一:当Producer开始向Leader写入数据

在这里插入图片描述

  • Leader 接收到producer发送消息后,将消息写入log文件
  • 自动更新自己的LEO值为1,即第一条消息写入0的位置,下一条写入位置为1
  • 尝试更新HW值,此时没有Fetch请求发起,Remote LEO 值还是0
  • Leader 用最新LEO值(1)与Remote LEO值(0)进行比较,取最小值
  • 最小值还是0,所以不用更新

步骤二: 当Follower 开始向Leader发送Fetch请求,获取数据

在这里插入图片描述

Follower在发送Fetch请求时,携带了Fetch offset,这个offset代表Follower要请求的下一条消息,其实也就是Follower的LEO
Leader 在返回数据时,携带了Leader HW,这是当前分区最新的HW值
在Follower Fetch请求时,Leader 和 Follower之间会互相同步信息

  • Leader 收到Follower 发送fetch请求后,
    • 先读取log文件获取数据
    • 更新Remote LEO=0(因为此时Follower还没有写入这条消息)
    • 尝试更新HW,逻辑同上,min(Leader LEO,Remote LEO) = 0,不用更新
    • 将数据和当前HW值一起发送给Follower
  • Follower 收到Leader返回的数据后
    • 先将消息写入本地log文件
    • 更新自己的LEO值为1
    • 更新HW值,逻辑同Leader,min(Leader返回的HW,自己的LEO)=0,不用更新

步骤三: Follower再次向Leader发起Fetch请求,获取数据

在这里插入图片描述

  • Leader 收到Follower 发送fetch请求后,
    • 先读取log文件获取数据
    • 更新Remote LEO=1(Follower 传过来的offset=1)
    • 尝试更新HW,min(Leader LEO,Remote LEO) = 1,更新HW=1
    • 将数据和当前HW值一起发送给Follower
  • Follower 收到Leader返回的数据后
    • 返回数据为空,不用写入log文件
    • 不更新自己的LEO值
    • 尝试更新HW值,min(Leader返回的HW,自己的LEO)=1,更新HW=1

上图有个炼狱,是什么呢?
当Leader无法满足fetch要求的数据,Leader就一条数据,Follower请求第二条数据,
此时Fetch请求会被暂存到purgatory(炼狱)中,待有数据再次处理,默认超时时间500ms,
当到达超时时间,返回空数据,
未到达超时时间,有生产者发送数据,会唤醒在炼狱中FETCH请求,开始上述处理过程

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

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

相关文章

网上考试系统将会成为提升教育质量的利器

随着信息技术的飞速发展,网上考试系统成为了现代教育的一项重要工具。这种基于网络的考试方式不仅为学校和机构提供了高效管理和评估学生的能力,同时也带来了许多便利和创新。 网上考试系统为学校和机构提供了更高效的管理方式。传统的纸笔考试需要大量…

计算机中丢失MSVCR120.dll,找不到MSVCR120.dll是什么意思?

当计算机中缺少MSVCR120.dll文件时,意味着缺少了Microsoft Visual C Redistributable文件的一个组件。MSVCR120.dll是Visual C Redistributable 2013的动态链接库文件,它是应用程序依赖的重要文件之一。缺少MSVCR120.dll文件可能会导致一些应用程序无法正…

极客时间-《左耳听风》

技术基础 02 程序员如何用技术变现(下) 在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式&…

【报错】git push --set-upstream origin XXXX重名

您在尝试将分支推送到远程仓库时遇到了错误。错误信息表明,由于已经存在名为 refs/heads/xingfan/demo 的文件夹,Git 无法创建分支 refs/heads/xingfan。 要解决此问题,您可以尝试重命名本地分支,然后将其推送到远程仓库。以下是…

冠达管理:被举牌的股票好不好?

所谓“举牌”,就是指通过买入目标公司5%以上的股份并自动公告,向商场宣示自己对公司股权的控制权和出资意向。那么,对于这些被举牌的公司,其股票好不好呢? 1. 举牌背面的原因 首先,咱们需求关注举牌背面的…

图数据库_Neo4j和SpringBoot整合使用_创建节点_删除节点_创建关系_使用CQL操作图谱---Neo4j图数据库工作笔记0009

首先需要引入依赖 springboot提供了一个spring data neo4j来操作 neo4j 可以看到它的架构 这个是下载下来的jar包来看看 有很多cypher对吧 可以看到就是通过封装的驱动来操作graph database 然后开始弄一下 首先添加依赖

RunnerGo链接数据库功能详解

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能,本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

​怎么将物理机硬盘克隆到虚拟机?

​用户案例:克隆后的硬盘是否能用于虚拟机? “我有一台安装了Windows10的计算机,现在正在尝试克隆电脑上的硬盘。然后我想把这个硬盘放在自己的虚拟机中使用,这样我就可以从克隆的硬盘中启动相同的Windows10系统。” …

做好以下几点,可以让我们延长周末体验感,好好放松!!!

工作以后常常容易感到疲于奔命,让我们找到适合自己方式,来让我们度过一个充实放松的周末! 方向一:分享你周末的时间规划 我们可以把每个月当做一个周期,制定一个简单的计划,如:第一周,锻炼身体…

手写代码-前端面试

GitHub:手写代码集合

windows任务计划程序运行bat文件,报错脚本错误:系统找不到指定的文件

先看错误: 我用windows任务计划程序运行调用python的程序,就写了一个bat,我想让他不显示命令框,所以我就加了上面可以隐藏命令框的,然后我用任务调用的时候就报错了 echo offif "%1" "h" goto b…

jenkins使用

安装插件 maven publish over ssh publish over ssh 会将打包后的jar包,通过ssh推送到指定的服务器上,,在jenkins中设置,推送后脚本,实现自动部署jar包,, 装了这个插件之后,可以在项…

一些封装电商API接口的常见步骤

电商API接口的封装是指将电商平台的功能和数据通过API接口的形式提供给开发者来调用。下面是一些封装电商API接口的常见步骤: 1. 确定需求:首先需要明确要封装的电商API接口的功能和数据,包括用户登录、商品搜索、订单管理等。Taobao。拼多多…

高并发内存池(threadcache)[1]

高并发内存池 分层处理 thread cache 定义一个公共的FreeList管理切分的小空间 static void*& NextObj(void* obj) {return *(void**)obj; }//管理切分好的小对象的自由链表 class FreeList { public:void Push(void* obj){assert(obj);//头插//*(void**)obj _freeLis…

RabbitMq-3入门案例

rabbitmq入门 1.生产者&#xff08;服务提供方&#xff09; //依赖<dependencies> <!-- rabbitmq客户端依赖--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0<…

骨传导耳机会伤耳膜吗?骨传导耳机有什么优缺点一文教你读懂

骨传导耳机会伤耳膜吗? 答案是不会&#xff01;因为骨传导耳机传声完全不会经过耳膜&#xff0c;说到这里就不得不讲一下骨传导的发声原理了&#xff0c;正常情况下&#xff0c;声音传声主要分为空气传导、固体传导和液体传导&#xff0c;物理大家都学过这里就不多赘述了。 我…

用MASM32编程更新sysInfo的一些收获

近日正在更新用MASM32编写的sysInfo&#xff0c;通过WMI访问Win32_UserCount来获取系统用户帐号信息&#xff0c;访问Win32_Product来获取系统中安装的产品信息。 在进行更新过程中&#xff0c;有一些新的收获跟大家分享。 一、HTMLJavaScript构建C类代码一键转换MASM32代码平…

中科方德4.0服务器 默认自动分区,扩容根分区方法

先看分区情况是否为非LVM的ext4&#xff0c;方德默认自动分配即是此种分区&#xff1b;外部添加磁盘空间&#xff0c;虚拟机或者物理机一样&#xff1b;图形化扩展到逻辑分区&#xff0c;如图中所示的扩展分区&#xff1b;home分区扩展&#xff1b;home分区尾部留出新home分区&…

iOS 17 正式版预计 9 月中下旬发布,部分新功能延后推出

苹果公司预计将在 9 月中下旬推出 iOS 17 正式版&#xff0c;iPhone XS 及更新的机型可免费更新。这次更新包含了许多新功能&#xff0c;但是根据苹果公司的网站显示&#xff0c;并不是所有的功能都会立即可用。苹果表示有一些功能“将在今年晚些时候推出”&#xff0c;比如&am…

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…