kafka将一个partiton分割成很多个segment文件,segment下分为几部分
- index文件:索引文件,与log文件有一定的关联关系
- log文件:真正存储数据的文件
例如:
这是我的topic下一个partition下中segment文件结构(为了方便调试,将segment大小设置为10K,图中包含2个segment:000.和238.)
其文件名的规则如下:
- 同一个segment下,index和log名字相同
- 下一个segment是上一个segment的lastOffset(这个offset后面会说)
index文件有什么用呢?其实就是一个索引,记录了一条消息在log文件中的位置,查找消息的时候先从index获取位置,然后就可以定位到消息在log文件具体哪个地方
index采用了稀疏索引的方式去存储,不是每来一条消息就记录一个索引,而是当消息大于某个值的时候,就会记录一次索引,默认是4KB
那么index是如何工作的,我们举个例子来说明会更加的方便理解,假设segment配置了10KB(log.segment.bytes),每1KB记录一次索引(log.index.interval.bytes参数),topic下只有1个partition,一个消息大小为43
此时发送多个消息,