KAFKA 服务端日志LEO和HW说明

2024-01-21 13:59

本文主要是介绍KAFKA 服务端日志LEO和HW说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

KAFKA 服务端一个日志文件包含两个特性:日志末端位移(log-end-offset)和高水印(high-watermask),无论是LEADER还是follow副本均含有这两个特性:

LEO:该副本底层log文件下一条要写入的消息的位移,例如LEO=10则当前文件已经写了了10条消息,位移是[0,10)。

HW:所有分区已提交的的位移,HW之外consumer无法消费,一般HW<=LEO。

一 LEO更新机制

1.1 follow的LEO更新机制

follow的LEO更新机制包括follow所在broker的follow的LEO更新机制以及Leader所在broker的follow的LEO更新机制。

follow所在broker的follow的LEO更新机制主要是为了follow的HW更新;

Leader所在broker的follow的LEO更新机制主要是为了Leader的HW更新。

(1)follow所在broker的follow的LEO更新机制

在follow向Leader发送fetch同步请求后,Leader将数据返回,此时follow向底层log写入数据然后更新LEO。

(2)Leader所在broker的follow的LEO更新机制

在follow向Leader发送fetch同步请求后,Leader收到后首先从自己底层log读取数据,然后根据Leader上的follow的LEO。再向follow发送响应。

1.2 Leader的LEO更新机制

在producer向Leader发送producer同步请求后,Leader收到数据,此时Leader向底层log写入数据然后更新LEO。

二 HW更新机制

2.1 follow的HW更新机制

更新时机:follow收到Leader的fetch响应更新follow端的LEO后,尝试更新follow的HW。

更新方式:HW=min(follow端的LEO,fetch响应中LEADER的HW)

2.2 LEADER的HW更新机制

更新时机:(1)新副本成为LEADER副本;(2)broker崩溃;(3)producer向LEADER请求写入了数据更新了LEADER的LEADER LEO;(4)follow向LEADER请求同步,更新了LEADER的follow的LEO

更新方式:HW=min(LEADER LEO, all follows' LEO in LEADR broker)

这里的所有follow包括ISR以及即将具备入ISR还没来得及入ISR的副本(副本LEO落后LEADER LEO的时长低于replica.lag.time.max.ms)

设一个主题,分区数1,副本因子2。

第一轮fetch

生产者给该topic发送了一条信息,待Leader写入log后更新Leader端的LEO=1;尝试更新Leader 的hw,hw=min(leader leo,follow leo)=0故hw=0

follow发送fetch请求,请求中附带follow端的follow leo=0,Leader读取log然后更新Leader的follow leo=0(因为fetch请求中附带follow端的follow leo=0);尝试更新Leader hw=min(leader leo,follow leo)=0,故塞给fetch相应中的leader hw=0

follow收到fetch请求后,写log,更新leo=1,follow的hw=min(leo, leader hw)=0

第二轮fetch

follow发送fetch请求,请求中附带follow端的follow leo=1,Leader读取log然后更新Leader的follow leo=1(因为fetch请求中附带follow端的follow leo=1);尝试更新Leader hw=min(leader leo,follow leo)=1故塞给fetch相应中的leader hw=1

follow收到fetch请求后,写log,此时无数据,故leo=1,follow的hw=min(leo, leader hw)=1

这篇关于KAFKA 服务端日志LEO和HW说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629771

相关文章

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c