当前位置: 首页>后端>正文

kafka中显示中文为16进制 kafka文件格式

ZK记录了主题与分区的关系

0 客户端的消息集

每个消息集偏移量,数据大小、数据内容等。
Meeage。scala中

1 日志结构

kafka中显示中文为16进制 kafka文件格式,kafka中显示中文为16进制 kafka文件格式_数据文件,第1张

一个分区定义个独立的目录,多个segment(默认1g)

segment主要由3部分组成:

索引文件:后缀为.index的文件;
日志文件:后缀为.log的文件;
时间戳索引文件:后缀为timeindex的文件。

已中止(Aborted)
事务的索引文件(.txnindex)

segment 文件命名规则:partition 全局的第一个 segment从 0 开始,后续每个 segment 文件名为上一个 segment文件最后一条消息的 offset 值进行递增。数值最大为 64 位long 大小,20 位数字字符长度,没有数字用 0 填充。如:

第一个 log 文件的最后一个 offset 为:5376,下一个segment 的文件命名为:
00000000000000005376.log
00000000000000005376.index
00000000000000005376.timeindex

每个segment文集都有一个基准的offset,

1 日志偏移元数据
下一个偏移量的源数据
日志结尾偏移量的元数据
最高水位的元数据
2数据文件
每间隔indexIntervalBytes才会创建一条索引(稀疏索引)
3 索引文件
索引偏移量是相对的

log文件

每条Message包含了以下三个属性:
offset
MessageSize
data

offset

为long类型

2 写入

kafka中显示中文为16进制 kafka文件格式,kafka中显示中文为16进制 kafka文件格式_数据_02,第2张

3 日志读取

1 选取分段:将数据文件分段,每段放在一个单独的数据文件里,由于文件命名与offset有关,所以在查找指定offset的数据时,使用二分查找法可快速定位到segment;
2 查找索引文件:数据文件分段使得可以在一个较小的数据文件中查找对应offset的数据了,但是这依然需要顺序扫描整个文件。为了进一步提高查找的效率,Kafka为每个分段后的数据文件建立了索引文件。其包含两个部分:

相对offset:这里的相对offset和log文件里的offset不同,相对offset是每个segment都从1开始的,而绝对offset在整个partition中都是唯一的。举例:分段后的一个数据文件的offset是从20开始,那么offset为25的数据在index文件中的相对offset就是25-20 = 5。存储相对offset可以减小索引文件占用的空间。

position:表示该条数据在数据文件中的绝对位置。只要打开文件并移动文件指针到这个position就可以读取对应的数据了

3 搜索
一条一条的搜索
4 0拷贝
处理客户端的拉请求,直接将问价传输到网络通信

4 日志管理

日志的创建、检索、清理

日志刷新策略和日志清理策略。

4.1 检查点文件

检查点表示已经刷到磁盘的位置,用于故障恢复。

1 启动管理类时,把每个分区对应的检查点作为恢复点
2 刷新日志,更新最新的偏移量最为日志的检查点
3 定时任务 定时刷盘

4.2 刷新日志(刷盘)

日志管理器会定时调度flushDirty方法,定期将页面缓存中的数据真正写到磁盘中,,每个log.fluish.interval.ms

4.3 清理日志

1 删除
时间和大小

删除日志的实现思路:当前最新的日志大小减去下一个即将删除的日志,小于阈值保留,大于则删除
删除是一个异步操作,在执行删除之前,要将日志分段从映射删除,并将日志分段的文件名(数据和索引文件)加上delete后缀。异步删除
2 压缩
对同一个key进行压缩



https://www.xamrdz.com/backend/3vv1921999.html

相关文章: