kafka(九)——LeaderEpoch和零拷贝

Leader Epoch

基于HW同步数据

在这里插入图片描述

流程说明:

  1. 集群配置至少写入的副本数为1,min.insync.replicas = 1
  2. 初始状态下,副本1(Leader)和副本2(Follower)的LEO和HW均为0;
  3. 生产者向副本1(Leader)写入2条消息,LEO=2,HW=0;
  4. 副本2(Follower)向副本1(Leader)拉取消息,携带LEO=0;
  5. 副本1(Leader)返回2条消息,并携带HW=0;
  6. 副本2(Follower)接收2条消息,并更新LEO=2;
  7. Follower副本第二次拉取消息,携带LEO=2,Leader副本接收消息后更新HW=2,返回时携带HW=2,Follower副本接收消息后更新HW=2;

基于HW机制的数据丢失问题

在这里插入图片描述

流程说明:

  1. 初始状态下,副本1(Leader)和副本2(Follower)的LEO=2,HW=1 ;
  2. 副本2携带LEO=2向副本1发起拉取请求,副本1接收请求后更新自身的HW=2,准备给副本2返回响应,此时副本2所在节点宕机,重启后根据HW将消息2截断;
  3. 副本2向副本1拉取消息,副本1所在节点宕机,副本2成为Leader;
  4. 副本1重启后变为Follower副本向副本2发送拉取请求,副本2向副本1返回HW=1,由于Follower副本的HW不能大于Leader副本的HW,副本1将消息2截断,更新HW=1;

此时发生副本1所在节点冲i去后消息2丢失的问题。

基于HW机制的数据不一致问题

在这里插入图片描述

流程说明:

  1. 初始状态下,副本1(Leader):HW=2,LEO=2,副本2(Follower): HW=1,LEO=1;
  2. 副本1和副本2同时宕机,副本1宕机后未启动,副本2重启后成为Leader;
  3. 生产者向副本2(Leader)写入一条消息,更新HW=2,LEO=2;
  4. 副本1所在节点重启,副本1变为Follower副本,由于检测到HW与副本2(Leader)相同,不会再进行日志同步或截断;

步骤4执行完后,副本1(Follower)和副本2(Leader)中消息出现不一致。

Leader Epoch

  • Leader Epoch 代表 leader 的纪元信息,初始值为0;
  • 每当 leader 变更一次,该值就会加 1 ;
  • Leader变更时,每个副本中还会增加一个对应关系:LeaderEpoch -> StartOffset,其中StartOffset 表示该 LeaderEpoch 下写入的第一条消息的偏移量,这个StartOffset也可以理解为上一个LeaderEpoch下副本的 LEO 值
  • 每个副本的Log下都有一个 leader-epoch-checkpoint 文件,在发生 leader epoch 变更时,会将LeaderEpoch -> StartOffset 的对应关系追加到这个文件。

Leader Epoch解决数据丢失问题

在这里插入图片描述

流程说明:

  1. 初始状态下,副本1(Leader)和副本2(Follower)的LE=0,StartOffset=0;
  2. 副本2(Follower)所在节点宕机,节点重启后不会根据自身的HW进行日志截断,而是向副本1(Leader)请求LEO,请求过程中携带自己的LE;
  3. 副本1(Leader)返回消息,并携带LEO=2;
  4. 副本2(Follower)解析响应LEO=2,不会再进行自身的日志截断;
  5. 副本1(Leader)所在节点宕机,副本2成为Leader,更新LE=1,StartOffset=2。无论副本1所在节点是否重启,生产者消息都会以LE=1追加到副本1中;

Leader Epoch解决数据不一致问题

在这里插入图片描述

流程说明:

  1. 初始状态下,副本1(Leader)有两条消息,HW=2,LEO=1;副本2(Follower)有一条消息,HW=1,LEO=1;两副本均为LE=0,StartOffset=0;
  2. 副本1和副本2所在节点同时宕机,副本2所在节点随后重启成为Leader,更新LE=1,StartOffset=1;
  3. 此时生产者向副本2(Leader)写入一条消息,更新HW=2,LEO=2;
  4. 副本1所在节点重启,副本1变为Follower,向副本2请求LEO,携带自身的LE=0;
  5. 副本2(Leader)根据携带的LE,找到LE=1对应的StartOffset=1作为LEO返回给副本1(Follower);
  6. 副本1(Follower)根据LEO=1对自身日志进行截断删除消息2;
  7. 副本1(Follower)向副本2拉取最新消息进行同步;

副本同步流程

  1. Leader副本接收生产者写入消息;
  2. Leader副本将消息写入本地磁盘,更新LEO;
  3. Follower副本发送数据同步请求,携带自身的LEO和LE
  4. Leader副本更新本地保存的其他副本的LEO;
  5. Leader副本尝试更新isr;
  6. Leader副本尝试更新HW;
  7. Leader副本返回Follower副本数据,携带Leader副本的LEO;
  8. Follower副本接收消息并写入数据,更新自身的LEO;
  9. Follower副本尝试更新本地的HW;
  10. isr副本同步完成后,Leader副本更新自身HW,返回生产者成功消息;

零拷贝

在这里插入图片描述

  1. 整个流程包含:两次上下文切换+两个DMA拷贝;
  2. 零拷贝指的是减少cpu拷贝;
  3. 生产者(Producer)向kafka生产数据使用mmap,写到mmap中的数据并没有被真正的写到硬盘,操作系统会在程序主动调用flush的时候才把数据真正的写到硬盘;
  4. Kafka提供参数producer.type来控制是不是主动flush。Kafka写入到mmap之后就立即flush然后再返回生产者(Producer)叫同步(sync),Kafka写入mmap之后立即返回Producer不调用flush叫异步(async);
  5. 消费者(Consumer)从kafka消费数据采用的是sendfile;

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

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

相关文章

防爆AGV叉车在现代物流行业的应用

AGV 随着机器人技术在中国的快速发展,国内企业开始推出区别于传统叉车的叉车AGV,旨在为企业降本增效,降低人工成本与对人的依赖;同时,也将人工从危险恶劣的环境中解放出来。随着技术的持续提升,叉车AGV已经…

npm run dev 同时运行vue前端项目和node后端项目

将两个项目放到一个目录下 项目拖进vscode中,安装包依赖,修改配置 npm i concurrently "dev": "concurrently \"vite --mode development\" \"nodemon app.js\"" 命令行 npm run dev 运行 没有运行成功排查 …

【第九课】空间数据基础与处理——空间参考处理

一、前言 地图图层中的所有元素都具有特定的地理位置和范围,这使得它们能够定 位到地球表面上相应的位置。精确定位地理要素对于制图和 GIS来说都至关 重要,而要正确地描述要素的位置和形状,需要引入一个用于定义位置的框 架———空间参考。…

数青蛙 ---- 模拟

题目链接 题目: 分析: 题目的意思是: 一次蛙鸣是一个完整的字符串"croak", 给你一个字符串, 让你求出最少的青蛙数目 示例一: 两次完整的"croak", 可以由一只青蛙完成, 所以答案为1 示例二: 第一次蛙鸣还没有结束, 又出现了"c", 说明有第二只青…

RTPS协议之Structure

目录 概览RTPS中的各实体和类RTPS实体和类的属性类型:RTPS Entities属性 HistoryCacheCacheChangeRTPS EntityRTPS ParticipantRTPS EndPointRTPS WriterRTPS Reader和DDS Entities的关联DDS DataWriterDDS DataReader 每个RTPS实体和DDS实体是一对一对应的。Histor…

Docker基础篇之Docker容器数据卷

文章目录 1. Docker配置容器卷配置时的一个建议2. Docker容器卷目录3. Docker容器卷案例 1. Docker配置容器卷配置时的一个建议 Docker挂载主机目录访问如果出现cannot open directory.:Permission dnied 解决方法:在挂载目录后加一个–privilegedtrue 如果是Cento…

ArkTS UI开发规范的常用装饰器

Component 可以装饰struct。结构体(struct)在被装饰后具有基于组件的能力,需要实现build方法来更新UI。Entry 可以装饰struct。组件在被装饰后会作为页面的入口组件,页面加载时将被渲染显示。Preview 可以装饰struct。 如果自定义的组件被Preivew装饰&am…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号,它们共享一个共同的功能,同时包含 单个信号和多条总线。例如,AXI4Lite主机包含一个 单个信号的数量加上多条总线,这些都是制作 联系通过将这些信号和总线分组到一个接口中,Vivado IP积…

C语言指针用法完善篇

一,指针定义: 1,讲解 指针变量用来记录地址数据,没有记录有效地址的指针变量不可以使用。 定义一个变量A和一个指针B,此时变量A存放在内存1000区间,将变量A赋值给指针变量B,此时指针变量B所接收到的并不是…

彩光大放异彩!《智慧园区以太全光网络建设技术规程》应用案例征集活动结果公布

近日,中国建筑业协会绿色建造与智能建筑分会正式公布了《智慧园区以太全光网络建设技术规程》应用案例征集活动的结果。本次活动旨在推广和应用该规程,进一步推动智慧园区的数字化、智慧化、绿色化建设。众多优秀项目在征集活动中脱颖而出,展示了规程在实际应用中的显著成效。评…

STM32--ESP8266 WiFi模块

前言:此文所述模块为正点原子出版的ATK-ESP8266模块 一、特性参数 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,ATK-ESP8266 板载了正点原子公司自主开发的 ATK-ESP-01 模块。 该模块是 ATK_ESP8266 的…

MySQL表的增删改查初阶(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

防火墙技术基础篇:eNSP配置防火墙主备备份的双机热备

防火墙技术基础篇:配置主备备份的双机热备 防火墙双机热备(High Availability, HA)技术是网络安全中的一个关键组成部分,通过它,我们可以确保网络环境的高可靠性和高可用性。下面我们一起来了解防火墙双机热备的基本原…

安装存储器的段描述符并加载GDTR

代码清单 ;代码清单12-1;文件名:c12_mbr.asm;文件说明:硬盘主引导扇区代码;创建日期:2011-5-16 19:54;修改于2022-02-16 11:15;设置堆栈段和栈指针mov ax, csmov ss, axmov sp, 0x7c00;计算GDT所在的逻辑段地址12 mov ax, [c…

文件删错后的救赎:恢复与预防策略

日常使用电脑、手机或其他存储设备时,我们时常会遭遇文件删错的尴尬局面。那些原本珍贵或至关重要的文件,可能因为一次意外的点击、一次误操作,甚至是一次设备故障而消失得无影无踪。本文将深入探讨文件删错的定义、原因、恢复方案以及预防措…

上传图片并显示#Vue3#后端接口数据

上传图片并显示#Vue3#后端接口数据 效果&#xff1a; 上传并显示图片 代码&#xff1a; <!-- 上传图片并显示 --> <template><!-- 上传图片start --><div><el-form><el-form-item><el-uploadmultipleclass"avatar-uploader&quo…

16.FreeRTOS直接任务通知 Notification

FreeRTOS 直接任务通知 Notification 介绍 在嵌入式系统开发中&#xff0c;任务间的通信和同步是非常重要的一部分。而FreeRTOS就提供了多种机制来实现这些&#xff0c;比如队列、信号量和事件组。不过&#xff0c;使用这些机制都需要创建一个通信对象&#xff0c;不能直接把事…

This may be due to a blocked port, missing dependencies

安装XAMPPXAMPP之后启动mysql出现如下问题&#xff0c;只需双击XAMPP安装目录下的setup_xampp&#xff0c;等待运行完毕。 重启&#xff0c;双击xampp-control. 重新进入xampp控制界面&#xff0c;点击start。

解释执行的难点

一、常见的解释执行编程语言 Python语言。 二、解释执行语言的特点 (一)可以一边编写一边执行 用户可以写入一行&#xff0c;解释器就执行一行。 如果执行错误还会提示。 (二)解释器会阻塞等待用户输入代码 如果代码输入后&#xff0c;有语法错误会提示。 翻译成机器代码&…