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

kafka--基础知识点--6.1--LEO、HW、LW

在 Apache Kafka 中,LEO(Log End Offset)HW(High Watermark)、和 LW(Low Watermark) 是副本机制和日志管理中的核心概念,共同确保数据一致性、可见性和存储效率。以下是它们的详细解释及关系:

1. LEO(Log End Offset,日志末端偏移量)

  • 定义
    表示当前日志文件中下一条待写入消息的偏移量。每个副本(Leader 或 Follower)都有自己的 LEO,用于跟踪自身的写入进度。
  • 特点
    • 动态增长:新消息写入时,LEO 会递增。
    • 副本独立:Leader 和 Follower 的 LEO 可能不同,Follower 的 LEO 表示已从 Leader 同步到的位置。
  • 示例
    若副本中最大消息的偏移量为 6,则 LEO 为 7(下一个写入位置)。

2. HW(High Watermark,高水位)

  • 定义
    分区中已成功复制到所有 ISR(In-Sync Replicas)副本的最后一条消息的偏移量 +1。取 ISR 中所有副本 LEO 的最小值。
  • 作用
    • 消息可见性:消费者只能读取 HW 之前的消息,HW 之后的消息对消费者不可见。
    • 数据一致性:确保消费者读取的消息已持久化到所有 ISR 副本,避免数据丢失。
  • 更新机制
    • Leader 更新:Leader 根据所有 Follower 的 LEO 动态更新 HW,公式为 HW = min(Leader_LEO, Follower1_LEO, Follower2_LEO, ...)
    • Follower 更新:Follower 从 Leader 获取最新 HW,并取自身 LEO 与 Leader HW 的较小值作为自己的 HW。
  • 示例
    若 ISR 的 LEO 分别为 10、9、8,则 HW = 8。消费者只能读取偏移量 0-7 的消息。

3. LW(Low Watermark,低水位)

  • 定义
    AR(Assigned Replicas)集合中最小的 logStartOffset 值。logStartOffset 是日志文件的起始偏移量,可通过日志清理策略调整。
  • 作用
    • 日志清理:标记最早还能被 Kafka 保留的偏移量,LW 以下的数据会被自动清理,防止日志无限增长。
    • 存储优化:通过配置日志保留策略(如按时间或大小),Kafka 自动删除 LW 之前的旧数据。
  • 示例
    若 LW = 1000,则偏移量小于 1000 的消息会被清理,消费者无法读取。

4. 关系与对比

概念层级作用更新频率与消费者关系
LEO副本级跟踪副本写入进度,决定新消息写入位置消费者不可见,仅用于内部同步
HW分区级定义消费者可见的消息范围,确保数据一致性消费者只能读取 HW 之前的消息
LW分区级标记日志清理边界,优化存储空间消费者无法读取 LW 之前的数据

典型场景与配置

  1. 消息写入与同步

    • 生产者发送消息到 Leader,Leader 更新 LEO。
    • Follower 同步消息后更新 LEO,并反馈给 Leader。
    • Leader 根据所有 Follower 的 LEO 更新 HW,确保消息对消费者可见。
  2. Leader 故障切换

    • 新 Leader 被选举后,会截断日志到 HW,确保不包含未提交的消息。
    • Follower 从新 Leader 的 HW 位置开始同步,恢复 ISR 状态。
  3. 日志清理与存储

    • 配置 log.retention.hourslog.retention.bytes 定义日志保留策略。
    • Kafka 自动清理 LW 之前的旧数据,释放存储空间。

参数调优建议

  • 可靠性优先
    • 设置 acks=allmin.insync.replicas=2,确保消息写入所有 ISR 副本。
    • 缩短 replica.lag.time.max.ms(默认 30 秒),快速检测落后副本。
  • 性能优先
    • 设置 acks=1,仅需 Leader 确认,提高吞吐量。
    • 增大 log.retention.byteslog.retention.hours,减少日志清理频率。
http://www.xdnf.cn/news/15932.html

相关文章:

  • 2025 Data Whale x PyTorch 安装学习笔记(Windows 版)
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部
  • react17更新哪些新特性
  • ARINC818协议综述
  • 48Days-Day03 | 删除公共字符,两个链表的第一个公共结点,mari和shiny
  • uniapp相关地图 API调用
  • servicemesh 学习
  • 实战分享:Web3 前端开发Defi项目
  • [硬件电路-39]:激光光路的光信号处理、模拟电路的电信号处理、数字电路的电信号处理、软件的信号处理,有哪些共通的操作、运算、变换?
  • 06-人机共生:Prompt之外的思考
  • 【RK3576】【Android14】USB开发调试
  • k8s 基本架构
  • 【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
  • 完美解决 Ubuntu 中自定义启动器图标重复的问题(以 MATLAB 为例)
  • bash方式启动模型训练
  • python基础复习
  • 高压电工作业证考试核心考点:电气安全基础篇
  • 响应式单位rpx及搭配使用UI产品工具
  • 风格多样!5 个覆盖全风格的素材网站,创作有新意
  • AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticOverIP
  • 创建套接字并bind的详细过程
  • 从 Server.xml 到字节码:Tomcat 内核全景与请求旅程 10 000 字深剖
  • MinIO深度解析:从核心特性到Spring Boot实战集成
  • 数据结构与算法之美:拓扑排序
  • 外观设计模式
  • Uniapp之键盘弹窗
  • win10连接鼠标自动关闭触摸板/win10关闭触摸板(笔记本)
  • 智能合约代理与批量调用优化:最小代理与MultiCall的应用
  • android studio libs.versions.toml 配置
  • 嵌入式硬件中电感的基本原理与实现详解