我有一个带有删除,紧凑的清理政策的Kafka主题。我不想让30天的记录保持在30天以上,因此设置为30天。其他相关配置是默认值,因此:

问题描述 投票:0回答:0
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
选择正确的值。对于所需的保留间隔,它应该小于压实数据的大小,因此一个段文件中的周期不会大于保留间隔。通过这种设置紧凑,不要将数据从广泛的时期合并到一个文件,并且该段文件在需要时有资格保留。

apache-kafka
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.