kafka学习笔记之二-文件存储

1-kafka配置文件简述

在开始了解文件存储前,我们先简单了解server.properties一些基本配置,在kafka默认配置中数据默认保存7天,每一个segment文件最大大小为1G,当大于1G时创建一个新的segment文件,socket请求也不是无限大,这样可以防止跑光了内存。具体可以见如下图:

kafka数据配置信息图:

kafka数据配置

kafka配置图

注意:在kafka中log不是kafka的日志文件而是kafka的储存数据的文件

2-kafka文件结构简单说明

kafka不断往log文件尾部追加数据,为了避免kafka数据过大,kafka采取了分片和索引机制。大家先看下面图片:

kafka文件存储图

每个分区平均分配到多个大小相等segment(段)数据文件中,但每个segment file消息数量不一定相等,这样方便旧 segment file快速被删除。

注意:log文件大小超出1G时会创建新的文件,而index文件名是起始偏移量(比如说当偏移量达到888时候log文件刚好达到1G,数据还没有保存完,那么这时新建一个log文件时,也同时新建一个index文件,文件名888.index,在这个888.index里偏移量从889开始)。

3-kafka是如何做到快速查找对应的数据

由于kafka不断写入数据,那么kafka是怎么做到快速查找到对应的数据的?我们依旧是先看一副图:

kafka中index和log文件关系图

首先根据offset,kafka使用二分查找法找到对应的index文件(也是segment),再根据index文件信息去log数据查找。这里我们需要注意的是:

1-index文件offset是数据的起始偏移量,每个索引两两之间的数据大小是相等的(log.index.interval.bytes)

2-segment是对分区的数据进行等大小的分片,index文件索引是对应的log文件的位置,而offset是针对一个分区下的偏移量,在新的index文件里是递增的

4-kafka是怎么定期处理数据

kafka每300000ms检测是否有符合删除的数据(log.retention.check.interval.ms),我们可以选择是按时间长短(一般7天)还是数据大小为删除条件,这个我们可以去kafka查看配置进行设置

最后这是自己整理的学习笔记,如果有错误希望可以指出,谢谢

推荐阅读:

kafka中文文档-配置

朱小厮博客对文件储存的解读(超级值得拜读)

猜你喜欢

转载自blog.csdn.net/lin_keys/article/details/103932041