《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,清除无效数据

相关推荐
lifallen2 小时前
如何保证 Kafka 的消息顺序性?
java·大数据·分布式·kafka
oi..2 小时前
CSRF安全攻防:Referer 校验与 Token 防护详解
前端·网络·笔记·测试工具·安全·网络安全·csrf
Fate_I_C2 小时前
创意创新孵化器平台
笔记
智者知已应修善业2 小时前
【51单片机独立按键控制数码管动态显示和LED间隔闪烁并清零】2023-5-28
c语言·经验分享·笔记·算法·51单片机
talen_hx2962 小时前
《零基础入门Spark》学习笔记 Day 15
大数据·笔记·学习·spark
真实的菜2 小时前
Kafka 2.x vs 3.x,我为什么选择升级?
kafka
_李小白2 小时前
【OSG学习笔记】Day 41: ReadFileCallback 与 WriteFileCallback(自定义文件读取)
java·笔记·学习
悠哉悠哉愿意2 小时前
【单片机复习笔记】十三届国赛复盘2
笔记·单片机·嵌入式硬件
时光追逐者2 小时前
分享四款开源且实用的 Kafka 管理工具
分布式·kafka·开源