cleanup.policy=delete,compact
retention.ms=2592000000 (30 days)
segment.bytes=1073741824 (1GB)
segment.ms=604800000 (1 week)
如预期的那样,似乎每周创建新文件。新记录写入最新的日志文件。问题是当前文件
00000000000000000000.log 581865395 Feb 7 15:45
00000000000003478578.log 37929134 Feb 14 15:45
00000000000003669403.log 276311746 Feb 21 15:45
00000000000003836847.log 336161019 Feb 28 15:46
00000000000004021954.log 288053840 Mar 6 15:51
包含2024-09-25和2025-02-07之间的记录,因此日志保留不会删除它,因为并非所有记录都至少30天了。其他日志文件中的记录是预期的,它们仅包含文件的最后一个修改时间之前的最后7天记录。
看起来出于某种原因有时会添加记录,并防止保留此日志文件。有什么解释?在检查了Kafka文档后,我的理解是只能将新记录添加到活动日志文件中。较旧的日志文件不应增长。可以通过保留率删除它们,或者压实器可以创建省略压实记录的副本。但是在较旧的日志文件中不应出现任何新记录。
对于我的其他主题,清理策略只是简单的
00000000000000000000.log
一切都按预期工作。这种奇怪的行为在
00000000000000000000.log
策略上出现在主题上。
事实证明,压实的作用与文档中写的不同。在检查了kafka.log.logcleaner的源代码后,我了解了我的情况中发生了什么。
清除(紧凑)正在删除日志文件中的一些记录。 Kafka希望防止非常小的日志文件,因此在清洁过程中,将日志文件合并到
delete
中配置的大小,在我的情况下,每周创建一个新的日志文件,但是紧凑的每周数据约为30-40 mb,将设置为默认的1 GB。因此,在压实过程中,卡夫卡总是将压实段合并到一个文件中,因为合并结果仍低于1 GB。
对于预期的结果,我必须为
delete,compact
选择正确的值。对于所需的保留间隔,它应该小于压实数据的大小,因此一个段文件中的周期不会大于保留间隔。通过这种设置紧凑,不要将数据从广泛的时期合并到一个文件,并且该段文件在需要时有资格保留。