如何从kafka删除较旧的消息而不是最近的消息

时间:2020-09-02 11:11:51

标签: python amazon-web-services apache-kafka

我正在尝试从kafka中删除较旧的邮件,但该邮件无法正常工作。我已经配置了kafka rentension.ms,log.cleanup属性也是如此。但是它并没有在5分钟后删除较旧的消息。这是配置,即使在kafka主题中存在较旧的记录,也将在5分钟内发布新消息。您能帮我解决一下此配置中缺少的内容吗?。因为这会增加存储成本。

-configtention.bytes = -1 --config cleanup.policy =删除--configtention.ms = 300000

1 个答案:

答案 0 :(得分:0)

首先,重要的是要了解LogCleaner只会删除主题的旧段上的数据,如cleanup.policy的配置说明中所述:

“一个字符串,既可以是“删除”也可以是“紧凑”,或者两者兼有。该字符串指定了要在日志段上使用的保留策略。”

您的所有数据很可能仍在一个段中,因此您需要减少主题的segment.bytes配置,以使您实际上得到“旧的”段。此配置默认为1GB,并描述为:

“此配置控制日志的段文件大小。保留和清除操作总是一次完成一个文件,因此较大的段大小意味着较少的文件,但对保留的粒度控制较少。”

如果您不想等到段被填满,也可以将配置segment.ms从默认值7天减少到更适合您的情况。此配置描述为:

“此配置控制了一段时间,在此时间段内,即使段文件未满,Kafka也会强制日志滚动,以确保保留可以删除或压缩旧数据。”

如果保留时间较短(例如5分钟),则可能还需要将代理范围的配置log.cleaner.delete.retention.ms从默认的1天减少到较低的值。此配置描述为:

“删除记录保留多长时间?”