Kafka-文件管理

文件管理

保留数据是kafka的一个基本特性,kafaka不会一直保留数据,也不会等到所有消费者都读取了消息之后才删除消息。相反,kafka为每个主题配置了数据保留期限,规定数据被删除之前可以保留多长时间,或者清理数据之前可以保留的数据量大小。

因为在一个大文件里查找和删除消息时很费时的,也很容易出错,所以我们把分区分成若干个片段。默认情况下,每个片段包含1GB(log.segment.bytes)或一周(log.segment.ms)的数据,以较小的那个为准。在broker往分区写入数据时,如果达到片段上限,就关闭当前文件,并打开一个新文件。

当前正在写入数据的片段叫做活跃片段。活动片段永远不会被删除,所以如果要保留数据1天(log.retention.ms),但是片段里包含了5天的数据,那么这些数据会被保留5天,因为在片段被关闭之前,这些数据是无法被删除的。如果要保留数据一周(log.retention.ms设置为7天),并且每天使用一个新片段(log.segment.ms设置为1天),那么就会看到,每天在使用一个新片段的同时会删除一个最老的片段--所以大部分时间该分区会有7个片段存在。

broker会为分区里的每个片段打开一个文件句柄,哪怕片段是不活跃的。这样会导致打开过多的文件句柄,所以操作系统必须根据实际情况做一些调优。