partition的数据文件(offset,MessageSize,data)
partition中的每条Message包含三个属性:offset,MessageSize,data。其中offset表示Message在这个partition中的偏移量,不是指实际存储位置,而是逻辑上的一个值,唯一的确定了partition中的一条message,可以认为是partition中message的id;MessageSize表示消息内容data的大小;data为Message具体内容。
数据文件分段 segment(顺序读写,分段命令,二分查找)
partition物理上由多个segment文件组成,每个segment大小相等,顺序读写。每个segment数据文件以该segment中最小的offset命名,文件扩展名为.log。这样在查找指定的offset的Message时,用二分查找即可。
数据文件索引
Kafka为每个分段后的数据文件建立了索引文件,文件名与segment文件的名称是一样的只是扩展名为.index。index文件中并没有为数据文件中的每条Message建立索引,而是采用稀疏存储,每隔一定字节建立一条索引。避免了索引文件占用过多空间。