《kafka核心源码解读》学习笔记 Day 02

日志究竟是如何加载日志段的?

日志是日志段的容器,里面定义了很多管理日志段 的操作。总体上,该文件定义了 10 个类和对象

1、LogAppendInfo

保存了一组待写入消息的各种元数据信息。比如,这组消息中第一条消息的位移值是多少、最后一条消息的位移值是多少;再比如,这组消息中最大的消息时间戳又是多少。

2、Log

Log 源码中最核心的代码

3、RollParams

定义用于控制日志段是否切分(Roll)的数据结构。

4、LogMetricNames

定义了 Log 对象的监控指标。

5、LogOffsetSnapshot

封装分区所有位移元数据的容器类。

6、LogReadInfo

封装读取日志返回的数据及其元数据。

7、CompletedTxn

记录已完成事务的元数据,主要用于构建事务索引。

除了.log、.index、.timeindex 和.txnindex 文件,还有其他几种文件类型。

.snapshot 是 Kafka 为幂等型或事务型 Producer 所做的快照文件。鉴于我们现在还处于阅读源码的初级阶段,事务或幂等部分的源码我就不详细展开讲了。

.deleted 是删除日志段操作创建的文件。目前删除日志段文件是异步操作,Broker 端把日志段文件从.log 后缀修改为.deleted 后缀。如果你看到一大堆.deleted 后缀的文件名,别慌,这是 Kafka 在执行日志段文件删除。

.cleaned 和.swap 都是 Compaction 操作的产物,等我们讲到 Cleaner 的时候再说。

-delete 则是应用于文件夹的。当你删除一个主题的时候,主题的分区文件夹会被加上这个后缀。

-future 是用于变更主题分区文件夹地址的,属于比较高阶的用法。

Log类的初始化逻辑

1、创建日志分区路径

2、初始化Leader Epoch Cache

2.1 Leader Epoch 检查点文件

2.2 生成Leader Epoch Cache 对象

3、加载所有日志段对象

4、更新nextOffsetMetadata和logStartOffset

5、更新Leader Epoch Cache,清除无效数据

相关推荐
lilihuigz1 天前
Tutor LMS 4.0 Beta版全新上线:以学习者为中心的移动优先学习体验
学习·在线教育·lms
William Dawson1 天前
2026软考中级系统集成项目管理工程师备考笔记
笔记·系统集成项目管理工程师
love530love1 天前
精简版|Claude-HUD 插件介绍 + 一键安装教程
人工智能·windows·笔记
kuinnebula1 天前
RTSP学习
学习
想成为优秀工程师的爸爸1 天前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
北顾笙9801 天前
LLM学习-day04
学习
tq10861 天前
数学:约束表征空间的最小闭包
笔记
lzj_pxxw1 天前
W25Q64存储芯片 软件设计刚需常识
stm32·单片机·嵌入式硬件·mcu·学习
Slow菜鸟1 天前
AI学习篇(四) | AI设计类Skills推荐清单(2026年)
人工智能·学习
freexyn1 天前
Matlab自学笔记七十六:表达式的展开、因式分解、化简、合并同类项
笔记·算法·matlab