深入Kafka - 日志存储
Kafka中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以分为一个或多个分区。 不考虑多副本的情况,每个分区对应一个日志(Log),每个日志包含多个日志分段(LogSegment),对应到物理存储,可以理解为Log对应日志一个目录,每个LogSegment对应一个日志文件和两个索引文件,以及可能的其他可能文件(比如事务索引文件)。 举例说明,假设有名为topic-log的主题,此主题有4个分区,那么在实际物理存储上表现如下图。 1. __consumer_offsets- * 如图中绿色标记部分,用来保存客户端消费消息之后提交的消费位移,以便在机器重启或者宕机恢复之后正确得知客户端消费消息的位置。(不是本章重点,不再赘述) 2. Log目录 图中蓝色标记部分,可以理解为每个分区对应一个目录。本例中topic-log主题包含四个分区,所以有"topic-log-0",“topic-log-1”,“topic-log-2”,"topic-log-3"这4 个文件夹。 3. 检查点文件 与Log目录平级的,存在4个检查点文件,用于日志的compaction。 cleaner-offset-checkpoint文件是 清理检查点文件 ,记录每个主题的每个分区中已经清理的偏移量,如下图(下文介绍日志压缩时会详细阐述) 4. 日志分段