我正在努力使紧凑的主题按预期工作。
我有一个压缩的主题,邮件已被正确压缩,但是当旧邮件的时间早于默认保留期限时,它们将被删除。
我想要一个紧凑的主题,该主题至少无限期地具有一个键的值。
如何做到这一点?我是否必须重写该特定主题的保留期?还是默认情况下,压缩主题应该无限期地保留一个键的值?
log.cleaner.backoff.ms = 15000
log.cleaner.dedupe.buffer.size = 134217728
log.cleaner.delete.retention.ms = 1000
log.cleaner.enable = true
log.cleaner.io.buffer.load.factor = 0.9
log.cleaner.io.buffer.size = 524288
log.cleaner.io.max.bytes.per.second = 1.7976931348623157E308
log.cleaner.min.cleanable.ratio = 0.001
log.cleaner.min.compaction.lag.ms = 0
log.cleaner.threads = 1
log.cleanup.policy = [compact, delete]
log.retention.bytes = -1
log.retention.check.interval.ms = 5000
log.retention.hours = 0
log.retention.minutes = 20
log.retention.ms = null
我找到了一个我想分享的解决方案。不幸的是,Kafka文档对此并不十分清楚,因此这可能会对某人有所帮助:
不要设置这个:
log.cleanup.policy = [compact, delete]
此设置将意味着所有主题均被压缩和删除。因此,您的主题将按照压缩规则进行压缩,但是当段(消息)的时间超过设置的保留时间(在我的情况下为20分钟)时,它们也会被删除。
将默认清理策略设置为:
log.cleanup.policy = compact
or
log.cleanup.policy = delete
(log.cleanup.policy =删除是默认配置)
“ log.cleanup.policy = compact ”表示默认情况下,主题将设置为压缩。
设置此默认策略时,无需进行任何更改。无需将log.retention设置为-1或任何其他值。您的主题将被压缩,并且旧消息也不会被删除(按照压缩规则)
“ log.cleanup.policy = delete ”意味着默认情况下,主题将在保留时间后被修剪。
如果选择此默认策略,则将需要覆盖每个主题的cleanup.policy;否则,将不执行任何操作。即,在此主题上显式设置cleanup.policy = compact。这将使该特定主题使用压缩而不是删除。您不需要调整log.retention。
PS,从直觉上讲,我认为当您基于每个主题指定“ log.cleanup.policy = compact”时,默认的“ log.cleanup.policy = [紧凑,删除]”会被覆盖,但是事实并非如此。使用“ log.cleanup.policy = [紧凑,删除]”,您可以有效地覆盖紧凑主题的工作方式;您将压缩更改为压缩+删除。
PS2,如果您在测试时遇到麻烦并且无法压缩主题,请注意,只能压缩非活动文件段;活动段永远不会被压缩。因此,为了进行测试,请将log.segment.bytes设置为较小的值,例如10000
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句