《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 小时前
Mqtt学习笔记(一):Mosquitto服务器搭建、MQTTX安装测试
学习
青山是哪个青山1 小时前
LangChain 学习笔记(三):LangSmith 调试与监控
笔记·学习·langchain
那年窗外下的雪.3 小时前
AIDC 学习日志 第 04 天 BGP Underlay 基础与路由选择
服务器·学习·php
蒸蒸yyyyzwd3 小时前
cpp选手备战后端学习笔记day6 秋招笔试题
笔记·学习
weixin_446260855 小时前
AVA-Encoder:面向智能体原生视频表征学习框架
学习·音视频
DeviceHub5 小时前
硬件工程师选型笔记:ALPS SKPMAPE010 与 Tonevee TS-3025 贴片轻触开关 PIN TO PIN 评估指南
笔记
吃好睡好便好6 小时前
说说口罩的佩戴
学习·生活·口罩
fīɡЙtīиɡ ℡6 小时前
大模型结构化输出
人工智能·学习
疯狂打码的少年7 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
Dave1205467 小时前
Day17:Agent Memory高级设计——短期记忆、长期记忆与向量语义记忆
人工智能·学习