kafka消息存储+查询机制

一、kafka数据存储机制

        kafka作为消息中间件,会临时存储消息,提供对外查询接口,数据默认存储168小时(7days),超时会被删除。

        kafka采用多文件存储方式来保存数据,主要是有两个方面的考虑:

  • 所有数据存储到一个文件,会使得存储文件比较大,影响查询的效率。
  • 对于过期数据的清理,不太方便,需要清理掉过期数据,并将未过期的数据重新写入到文件,切分多个文件后,可以根据文件的日期,直接删除文件即可。

         如上图所示,segment段有两个核心文件:log文件和index文件,当log文件等于1G时,新的数据会写到下一个segment中,可以通过下图可以看出segment段会存储差不多70万条数据。

 

        文件命名规则说明

  • 00000000000000000000.index——表示最开始的文件,起始偏移量(offset)为0
  • 00000000000000368769.index——消息的起始偏移量为368770=368769+1
  • 00000000000000737337.index——消息的起始偏移量为368770=368769+1

*以起始偏移量命名并排序这些文件,只需要根据offset的二分查找算法,快速定位到需要查询的指定的偏移量对应的文件。

        思考个问题:切分文件的时间阈值?比如一天没有写到70万条数据,应该也会生成新的segment段。

 二、kafka数据查询机制

        说个具体的查询例子,来说明kafka的查询机制。

        比如在下图的kafka文件中,查询offset=368776的message消息。

        第一步:确定segment段

         根据index文件命名规则,使用二分算法,定位到368776这个偏移量应该在文件00000000000000368769.index文件中。

        第二步:通过segment file查找message

        第一步中已经定位了元数据物理位置00000000000000368769.index,进一步可以定位到物理偏移地址文件00000000000000368769.log,通过顺序查找到offset=268776的message。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值