我正在关注“Kafka:权威指南”第一版一书,以了解代理何时删除日志段。
根据我理解的文本,一个片段在关闭之前不会有资格被删除。段只有在达到 log.segment.bytes 大小时才能关闭(考虑 log.segment.ms 未设置)。一旦一个段符合删除条件,log.retention.ms 策略将应用于最终决定何时删除该段。
然而,这似乎与我在我们的生产集群(Kafka 版本 2.5)中看到的行为相矛盾。
一旦满足 log.retention.ms,日志段就会被删除,即使段大小小于 log.segment.bytes。
[2020-12-24 15:51:17,808] INFO [Log partition=Topic-2, dir=/Folder/Kafka_data/kafka] 由于保留时间 604800000 毫秒违规(kafka.log。日志)
[2020-12-24 15:51:17,808] INFO [Log partition=Topic-2, dir=/Folder/Kafka_data/kafka] 调度段删除 List(LogSegment(baseOffset=165828, size=895454171 , lastModifiedTime=1608220234000,最大时间=1608220234478)) (kafka.log.Log)
大小仍然小于 1GB,但该段已被删除。
该书在新闻发布时提到 Kafka 版本是 0.9.0.1 。在后来的 Kafka 版本中,这个设置也发生了变化。(我在 Kafka 文档中找不到任何具体提及此更改的内容)。以下是书中的片段。