一、日志存储:
Kafka中的消息是以主题为基本单位进行归类的,各个主题在逻辑上相互独立。每个主题又可以氛围一个或多个分区,分区的数量可以再主题创建的时候指定。在不考虑多副本的情况下,一个分区对应一个日志(Log)文件,为了防止Log过大,Kafka又引入了日志分段(LogSegment)的概念,将Log切分为多个LogSegment,相当于一个巨型文件被平均分配到多个相对较小的文件,这样也便于消息的维护和清理。事实上,Log和LogSegment也不是纯粹物理意义上的概念,Log在物理上只以文件夹的形式存储,而每个LogSegment对应于磁盘上的一个日志文件和两个索引文件,以及可能得其他文件。
二、日志清理
Kafka将消息存储在磁盘中,为了控制磁盘占用空间的不断增加就需要对消息做一定的清理操作。Kafka中每一个分区副本对应一个Log,而Log又可以分为多个日志分段,这样也便于日志的清理操作,Kafka提供了两种日志清理策略。 (1)日志删除:按照一定的保留策略直接删除不符合条件的日志分段。 (2)日志压缩:针对每个消息的key进行整合,对于有相同key的不同value值,只保留最后一个版本。