当前位置: 首页 > article >正文

Kafka中ACKS LSO LEO LW HW AR ISR OSR解析

名称解释

ACKS(Acknowledgments)确认、回执

LW(Low watermark)低水位、LSO(Log start offset)起始偏移量

HW(High watermark)高水位

LEO(Log end offset)日志末尾偏移量

AR(Assigned replica)分配的副本

ISR(In sync replica)正常同步的副本

OSR(Out sync replica)非正常同步的副本

 

消息生产和消费流程

以单副本为例,生产者(Producer)包装消息指明Topic后消息到达Broker中的分区(Partition),此时数据在Broker服务程序中;Broker将数据写到内核缓存页(Page cache),此时数据在物理内存;最后按照配置的刷盘策略写到磁盘中的消息日志(Log)中。

刷盘频率如果太高,会影响服务性能;如果频率太低,Broker宕机,在内存中未写到磁盘的消息会丢失。所以需要在效率和数据完整性之前做权衡(Trade off)来配置合适的策略。

消费者(Consumer)与服务器建立连接向Broker发送拉取消息请求,请求信息先到达网卡再到达Broker;Broker通过系统调用sendfile将读取到缓存页中的数据直接拷贝到网卡中,也就是零拷贝技术,最终数据返回给消费者。消费者消费完后还需要主动向Broker提交请求来更新消费进度。

 

AR、ISR、OSR

AR(Assigned replica)已分配的副本指主题(Topic)创建时设置的副本,所有副本包括主(Leader)和从(Follower)都归属AR。

ISR(In sync replica)正常同步的副本和OSR(Out sync replica)非正常同步的副本是指从副本的两种状态,有周期性任务将副本按这个状态进行进行划分。

判断条件有两个:

(1)根据从和主同步的超时时间判断,配置参数rerplica.lag.time.max.ms=10000;

(2)根据从与主消息条数差值盘,配置参数rerplica.lag.max.messages=4000。

AR = ISR + OSR

 

ISR机制

在ACKS策略配置为-1的时候,需要等待所有ISR(In sync replica)集合中的副本将消息写入消息日志(Log)后才会给生产者(Producer)返回确认。以3个副本(Replica)为例,开始是都是正常同步,此时ISR集合中副本为3个。在同步消息[4]的时候Broker2上的副本出现网络问题或者宕机超过设置的超时时间,周期任务扫描到后将其划分到了OSR(Out sync replica)集合,给与了生产者确认。后续消息确认不再等待这个副本。

当OSR集合中的副本恢复并与主副本同步数据追平后,又会被周期任务扫描划分回ISR集合中。

 

 

LSO、LEO、LW、HW

LEO(Log end offset)日志末尾偏移量是新消息写入时将分配的偏移量(Offset)值,从0开始,随着消息不断写入递增。

LW(Low watermark)低水位,代表AR(Assigned replica)集合中最小的LSO(Log start offset)起始偏移量。旧日志的清理和消息删除都有可能促使LW的增长。

HW(High watermark)高水位代表ISR(In sync replica)集合中最小的LEO。

比如当ACKS(Acknowledgments)配置为1时,不需要等待从(Follower)就会给生产者(Producer)返回确认,这就可能会导致从还没来得急同步。此时ISR集合中最小的LEO没有变化,就代表HW不变,消费者还无法消费到新的数据。

消费者能消费的数据 = [LW,HW)

 


http://www.kler.cn/a/404558.html

相关文章:

  • web钩子什么意思
  • Linux 服务器使用指南:从入门到登录
  • 原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型
  • Android ROM开发 编译阶段设置预置文件或者文件夹的权限
  • 【第八课】Rust中的函数与方法
  • Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
  • Spring Bean 的生命周期详解
  • 笔记--(Shell脚本01)、正则表达式与文本处理器
  • 零基础Java第二十二期:异常(二)
  • 【Nginx从入门到精通】05-安装部署-虚拟机不能上网简单排错
  • 大语言模型与图结构的融合: 推荐系统中的新兴范式
  • 基于LLama_factory的Qwen2.5大模型的微调笔记
  • Scala中的集合复习(1)
  • 2024中国报业技术年会 | 文盾信息聚焦AI大模型的内容安全风控实践
  • Easyexcel(3-文件导出)
  • 鸿蒙多线程开发——线程间数据通信对象02
  • 用Python爬虫“偷窥”1688商品详情:一场数据的奇妙冒险
  • Scala的Array多维数组
  • 介绍一下strncmp(c基础)
  • 大学课程项目中的记忆深刻 Bug —— 一次意外的数组越界
  • 【Linux】系统调用和库函数汇总整理
  • Ubuntu安装sublime Tex
  • FreeRTOS消息队列实验与出现的问题
  • uni-app 修改复选框checkbox选中后背景和字体颜色
  • redis实现计数器功能
  • 如何取消分词搜索