深入了解kafka(三)

1.kafka消息的存储原理

1.简要说明:在kafka中,一个topic下面会有多个partition,partition在磁盘上是存在物理路径的,在partition目录下存放着kafka对应的日志文件。(我们存了哪些文件)
在这里插入图片描述
总结我们partition下存了哪些文件:index,log.timeindex

2.kafka会使用分段的方式(LogSegment)来存储数据,LogSement只是一个逻辑上的概念,他在物理磁盘上的表现为一个.log文件与一个.index总是成对存在的。我们可已在config/server.properties下面配置每一个分段的大小。
在这里插入图片描述
他默认的logSement是1G。分段后的结果是:
在这里插入图片描述
如果kafka以partition必然会导致数据很难清理,所以使用在partition下面在细分logSement,这样就更加好管理数据。
在这里插入图片描述
总结:我们是怎么存储的:分段logSement存的

4.他各个文件下面的内容以及命名规则:
(1).log文件
查看命令:sh kafka-run-class.sh kafka.tools.DumpLogSegments --files /Users/michael/kafka/tmp/kafka-logs/quantopic-0/00000000000000000000.log --print-data-log
查看结果:
在这里插入图片描述
命名规则:
发现第一个log文件的最后一个offset,是下一个logSegment里面log文件名,文件名都是20位字符长度的。
(2).index文件
查看命令:sh kafka-run-class.sh kafka.tools.DumpLogSegments --files /Users/michael/kafka/tmp/kafka-logs/quantopic-0/00000000000000000000.index --print-data-log
查看结果:
在这里插入图片描述
5.logSement中index文件与log文件的关系
在这里插入图片描述
简要文字说明:index文件里面存的是offset和物理偏移量,而log文件里面存放的是offset,物理偏移量和消息内容,在index里面position是不重复的,而在log文件中,一段offset区间,它里面的position是相同的重复的。

总结一下:我们怎么看这些文件-对应的脚本,文件里面有什么内容-截图,index-log文件的关系(图),这些文件怎么命名-上一个文件最后的offset

6.基于这样的机制,我们是如何获取到一个offset的消息的内容的(过程)
(1)首先我们会根据offset值查找到对应的index文件,由于index文件是有上一个文件的最后一个offset命名的,我们使用二分查找法很快就可以找到index索引文件。
(2)得到索引文件之后,我们根据offset来定位,二分查找法确定索引范围得到一个[offset,position]。
(3)确定访问后我们会得到一个position,再从log中的这个position开始顺序遍历查找到对应的offset的信息
举例子:我们需要获取offset为208050的信息
(3.1).00000000000000206233.index<208050<00000000000000210308.index,,可以确定索引文件为00000000000000206233.index
(3.2).再索引文件中有:
offset: 206782 position: 5189
offset: 206783 position: 12094
offset: 207236 position: 22092
offset: 207800 position: 34400
offset: 208047 position: 39321
offset: 208920 position: 57194
offset: 209129 position: 61302
offset: 209337 position: 68328
offset: 209532 position: 72714
offset: 209674 position: 77123
offset: 209839 position: 81360
offset: 210162 position: 87227
你会发现:根据208050,二分查找法,小于或等于这个数,你会找到offset: 208047 position: 39321这条索引
(3.3).再到log文件中,根据39321这个position开始顺序查找,比较每条消息的offset是否大于等于208050。最后查找到对应的消息以后返回

7.使用分段处理的好处是:
1.清除旧的日志:默认清楚7天前的旧数据
2.也可以根据大小来清除日志,在server.properties配置
3.也可以进行日志压缩:其中一种压缩策略是根据相同的key进行压缩,取最新的values

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值