消息的保存路径:
默认情况下是保存在 /temp/kafka-log中
存储方式
使用日志文件+索引的方式
消息写入
使用了顺序写入和零拷贝来提升写入性能,consumer和producer都是使用的二进制数据,避免了格式的转化
日志的分片
当日志文件过大的时候,会严重影响性能,于是当日志文件达到一定的大小的时候会对日志文件进行分片,这个大小默认是1GB,可以通过
long.segment.bytes这个配置来调整,日志的片段叫做segment
segment由两大部分组成:索引(一种是offset索引,一种是时间索引)和数据,他们成对出现后缀分别是index和log
segment命名规则:patition全局的第一个sequment从0开始,后续的每个segment文件名为上一个segment的最后一条消息的offset+1.数值最大为64位long大小,没有的位数补零
如何查找消息?
如图所示,左边一列是offset,右边一列是position(物理偏移量4053~4559的position都是一样的),比如说查找offset为4055的消息。那么会去找消息对应的segment,然后通过二分法去找index文件对应的offset区间,会找到4053,然后根据4053找到对应的position80899,然后去日志文