1. 基本概念
topic的一个分区对应一个日志(Log), Log又被切分为多个LogSegment,可以防止Log过大的同时方便维护和清理。
Log在物理上是以文件夹的形式存储,LogSegment对应的是一个日志文件和两个索引文件,以及可能的其他文件。
向Log中写入数据是顺序写入的,只会向最后一个LogSegment中写入数据,当满足一定条件后,会向新的LogSegment中写入数据。
每一个LogSegment都有一个基准偏移量用来表示当前LogSegment第一条消息的offset
2. 索引文件
索引文件主要用来提高消息查找的速度。
a. 偏移量索引文件
用来建立消息偏移量(offset)和物理地址间的映射关系,方便快速定位消息的物理文件位置
b. 时间戳索引文件
根据时间戳查找对应的偏移量信息
c. 索引文件
索引文件是稀疏索引,每写入一定量数据后,才会在索引文件中增加一个索引
索引文件内的偏移量是单调递增的,查找偏移量时采用二分查找,如果偏移量不在索引文件中,则返回小于指定的偏移量的最大偏移量
3. kafka速度快的原因:
数据顺序写入、页缓存、零拷贝