kafka--消息存储与读取

本文详细解释了Kafka的存储方式,涉及.log和.index文件的组织结构,以及如何通过二分法定位和查找特定消息,包括计算偏移量和索引文件的应用。
摘要由CSDN通过智能技术生成

kafka的存储方式与区块链一样,都是文件存储,通过响应的.log和.index文件来存储,每一个partition为一簇.log和.index文件,一组.log和.index构成了一个segement,partition便是由多个segement组成

每有一条新消息,都会追加到partition的末尾,也会追加存储到该partition的存储文件中,当这个文件大于1G时,会创建一个新的.log文件。

如何找到一条消息呢?

除了.log文件外,还会有一个同名的.index文件来存储消息的索引信息

image.png

index文件的序号就是对应.log文件中第一条消息在所有消息中的相对偏移量(第n条消息)

例如000000000170410.log中存储的第一条消息是message-170411

举个例子:

image.png

现在我们要找到1560140921的消息:

1.定位到具体的segment日志文件,采用二分法先定位到index索引文件
由于log日志文件的文件名是这个文件中第一条消息的offset-1。
因此可以根据offset定位到这个消息所在日志文件:00000000001560140916.log

2.计算查找的offset在日志文件的相对偏移量

segment文件中第一条消息的offset = 1560140917

计算message相对偏移量:

需要定位的offset - segment文件中第一条消息的offset + 1 = 1560140921 - 1560140917 + 1 = 5

查找index索引文件, 可以定位到该消息在日志文件中的偏移字节为456。

直接读取文件夹00000000001560140916.log中偏移456字节的数据即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值