Kafka不会删除主题中的旧邮件

时间:2018-02-12 12:05:56

标签: apache-kafka

在kafka中,我已将保留政策设置为server.properties

中的3天
############################# Log Retention Policy #############################
...
log.retention.hours=72
...

主题retention.ms设置为172800000(48h)。

但是,文件夹/ tmp / kafka-logs中仍有旧数据,并且没有删除任何数据。 我在更改这些属性后等了几个小时。

是否有需要设置的东西?目前正在制作和使用所有主题。

3 个答案:

答案 0 :(得分:3)

关键是将log.cleanup.policy设置为compactdelete。我没有设置这个属性。

正在运行:kafka-topics --zookeeper 127.0.0.1:2181 --topic topic1 --describe显示在主题上设置的属性,例如。 Configs:retention.ms=172800000,cleanup.policy=compact

必须设置cleanup.policy

答案 1 :(得分:1)

kafka retention policy didn't work as expected中所述:

日志保留基于日志文件的创建日期。尝试设置log.roll.hours< 24(因为[默认] [1]它是24 * 7)。

答案 2 :(得分:1)

Compact策略将仅压缩键中的值。也就是说,它最终将触发压缩过程,该过程将只为密钥保留一个(最终)值。但是永远不要删除最后一个值。

为了按时间触发删除,您需要设置delete策略。在这种情况下,删除过程将删除早于给定数据的数据。

但是,您可以将策略设置为compact,delete,以在同一个主题上利用这两个过程(在早期版本中不可用)。

但是,这些过程并非完全精确:在某些情况下,它们最终会被触发,例如:

# The interval at which log segments are checked to see 
# if they can be deleted according to the retention policies
log.retention.check.interval.ms=300000

(检查Kafka documentation上的更多条件,然后保证将删除早于阈值的数据。

此外,针对不同的时间粒度有不同的设置,并且它们具有优先级(如果设置了一个,它将忽略下一个)。确保没有意外覆盖。请查看综合文档以了解详细信息。