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

相关推荐
阿里云云原生1 天前
数据链路再精简:Kafka 如何做到“零 ETL”一键写入 Apache Iceberg?
kafka
RainCity1 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
阿里云云原生7 天前
告别冗长链路!Kafka × Table Bucket 实现开放表格式零 ETL 实时入湖
云原生·kafka
LinXunFeng9 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆13 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8613 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e13 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨13 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙