kafka的索引机制

概述

数据文件的分段和索引

kafka解决查询效率的手段之一是将数据文件分段存储,可以配置每一个文件的大小。每一个端单独放在一个.log的文件中,数据文件命名是20个字符的长度,以每一个分段文件开始的最下offset来命名,其他位置用0填充。最初始的文件是00000000000000000000.log命名的,比如下一个log中的第一条消息的offset是18987,则该log文件的命名是00000000000000018987.log

其中每一个log文件的大小默认是1GB,没生成一个log文件就会对应产生一个index文件,是和log文件的命名相同的。这样在进行消息检索的时候可以快速利用二分的方法进行查找,定位到某一个分段文件中。

数据文件的分段使得可以在一个较小的数据文件中找到对应的offset的message了。在index文件中的索引实际也是稀疏性的,并不是全部都建立索引的。(这也是考虑到index文件在加载到内存的时候,能不占用大量的内存和CPU资源)索引文件中包含的若干条目,每个条目表示的数据文件中的一条message的索引——是当前的message在数据文件的offset和在文件的position(message在文件中的绝对位置信息)的对应关系。如下图所示:

其中00000000000000000000.index文件中的3,4597对应到00000000000000000000.log文件中的第三条消息,并且该消息的绝对位置是4597。但是如果消费者想要 获取5,7912的话,此时index文件中并没有5,所以根据二分查找,先找到3的位置,在进行顺序扫描从而找到5,7912的message。

index文件中并没有为每一条message建立索引。而是采用了稀疏存储的方式,每隔一定字节的数据建立一条索引,这样的话就是避免了索引文件占用过多的空间和资源,从而可以将索引文件保留到内存中。缺点是没有建立索引的数据在查询的过程中需要小范围内的顺序扫描操作。

索引文件映射到内存的话,从而提高了查找的速度信息。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值