kafka中的稀疏索引

kafka 中的消息就是 topic,topic 只是逻辑上的概念,而 partition 才是物理上概念,每个 partition 会对应一个 log 文件,它存储的就是 producer 生产的数据。生产者生产的数据会不断追加到 log 文件中,如果 log 文件很大了,就会导致定位数据变慢,因此 kafka 会将大的 log 文件分为多个 segment,每个 segment 会对应.log 文件和.index 文件和.timeindex 文件,.log 存储数据,.index 存储偏移量索引信息,.timeindex 存储时间戳索引信息。它的存储结构大概就是这样的【log.segment.bytes = 1g:指 log 日志划分成块的大小】

◼ .index 为稀疏索引,大约每往 log 文件写入 4kb 数据,会往 index 文件写入一条索引。
◼ log.index.interval.bytes=4kb
◼ Index 文件中保存的 offset 为相对 offset,这样能确保 offset 的值所占空间不会过大。
用稀疏索引,可以快速定位要消费的数据。
**实现思路:**消费者需要读取数据时,它首先从ZooKeeper获取自己在各个分区的消费位置(即消费者的offset)。然后,消费者使用分区的稀疏索引快速定位到指定offset的消息所在的文件位置。一旦找到了正确的文件和位置,消费者就可以从中读取消息。这种方法减少了磁盘I/O操作。
简单理解:在Kafka中,每个主题分区可以看作是一本书,而消息就是书中的句子。Kafka为每个分区维护了一个稀疏索引,这个索引不是为每条消息都记录一个条目,而是每隔一定数量的消息记录一次。当消费者需要读取特定偏移量的消息时,它首先使用这个稀疏索引来确定消息所在的数据文件的大致位置,然后再从这个位置开始顺序读取,直到找到所需的消息。稀疏索引占用的空间较小,Kafka能够在较短的时间内定位到消息的大致位置,从而加快了消息读取的速度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值