【发布时间】:2020-05-28 19:20:23
【问题描述】:
我尝试创建一个使用压缩和删除的 Kafka 主题配置,以实现以下目标:
- 在保留期内,保留最新版本的密钥
- 在保留期之后,任何早于时间戳的消息都将被删除
为此,我尝试了以下特定于主题的配置:
cleanup.policy=[compact,delete]
retention.ms=864000000 (10 days)
min.compaction.lag.ms=3600000 (1 hour)
min.cleanable.dirty.ratio=0.1
segment.ms=3600000 (1 hour)
代理配置如下:
log.retention.hours=7 days
log.segment.bytes=1.1gb
log.cleanup.policy=delete
delete.retention.ms=1 day
当我在测试中将其设置为较小的量时,例如20分钟,1小时等,我可以正确地看到数据在保留期后被修剪,仅在主题上调整retention.ms。
我可以看到数据已按预期正确压缩,但在 10 天的保留期之后,如果我从头开始阅读该主题,超过 10 天的数据仍然存在。这么长的保留期有问题吗?
我在这里缺少任何配置吗?我检查了 kafka 日志,看到代理正在按预期滚动分段和压缩,但看不到任何有关删除的信息?
卡夫卡版本是 5.1.2-1
【问题讨论】:
-
如果有帮助:Similar problem
-
@pratikmishra 我读到了,据我所知
log.roll.hours处于代理级别,segment.ms应该涵盖主题级别? -
希望您对由于压缩为 delete.retention.ms 而创建的墓碑记录没有任何问题,如果未配置为 1 天。没有插入任何重复键的记录有问题吗?另外,您是否在保留时间 10 天后检查了更清洁的日志?
-
@Surendra 我检查了代理配置,
delete.retention.ms是1 day,我看到压缩记录的正确行为,例如对于具有相同密钥的消息,仅保留一个。对于 10 天内的消息,这些消息目前似乎被无限期保留。 -
这个配置在集群上已经存在了大约 12 天,我预计它会在第 10 天最多删除数据,但似乎没有任何操作?我会在日志上搜索什么?
标签: apache-kafka