Kafka-紧凑的主题,保留空间有限

时间:2018-11-08 21:46:33

标签: apache-kafka

我正在努力使紧凑的主题按预期工作。

我有一个压缩的主题,邮件已被正确压缩,但是当旧邮件的时间早于默认保留期限时,它们将被删除。

我想要一个紧凑的主题,该主题至少无限期地具有一个键的值。

如何实现?我是否必须重写该特定主题的保留期?还是默认情况下,压缩主题应该无限期地保留一个键的值?文档尚不清楚...

谢谢!

我的配置:

    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

2 个答案:

答案 0 :(得分:4)

我找到了要分享的解决方案。不幸的是,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 =删除”意味着默认情况下,主题将在保留时间后被修剪。

如果选择此默认策略,则需要覆盖每个主题的cleanup.policy;即,在此主题上显式设置cleanup.policy = compact。这将使该特定主题使用压缩而不是删除。您无需调整log.retention。

PS,直觉上,我认为当您针对每个主题指定“ log.cleanup.policy = compact”时,默认的“ log.cleanup.policy = [紧凑,删除]”会被覆盖,但是事实并非如此。 。使用“ log.cleanup.policy = [紧凑,删除]”,您可以有效地覆盖紧凑主题的工作方式;您可以将压缩更改为压缩+删除。

PS2,如果您在测试时遇到麻烦并且无法压缩主题,请注意,只有非活动文件段可以压缩;活动段永远不会被压缩。因此,为了进行测试,请将log.segment.bytes设置为较小的值,例如10000

答案 1 :(得分:2)

仅选择“压缩”作为清理策略,并设置无限期保留。

log.cleanup.policy = [compact]
log.retention.bytes = -1
log.retention.ms = -1