当Kafka清除消息时

时间:2019-04-24 17:02:18

标签: apache-kafka

我有Apache Kafka集群,其保留策略删除,保留期限设置为24小时。 然后,我动态更改了保留期,并针对某些特定主题将其设置为1分钟。但是旧的消息仍然存在,所以我有几个问题:

  1. 保留的触发点是什么?我假设尽管为邮件设置了一些明确的生存时间,但不能保证在此时间之后将删除邮件。那是什么过程呢? (在参考中找不到任何内容)
  2. 如果我在运行时更改了保留期限,旧消息将服从它。据我了解,保留期是整个主题的属性,并且对于在第一个保留期发布的邮件也应适用。

2 个答案:

答案 0 :(得分:2)

保留策略仅适用于封闭的细分受众群。如果您的细分仍然处于活动状态,则在关闭该细分并打开新细分之前,不会清除该细分中的数据。

答案 1 :(得分:2)

在每个代理上,分区被划分为段日志。默认情况下,一个段将存储1GB的数据(log.segment.bytes)的数据。此外,默认情况下每7天(log.roll.hours)推出一个新的日志段

每个代理安排一个更清洁的线程,该线程负责定期检查哪些段可以删除。默认情况下,清洁程序线程将每5分钟运行一次检查(可以通过代理配置进行配置:log.retention.check.interval.ms)

如果日志中的最新消息早于配置的保留期限,则段是可移动的。此外,活动段日志(代理当前正在写入的日志)无法删除

为了能够尽快删除段日志,您应该配置与保留期相关的日志滚动。例如,如果您将保留期限配置为24小时,那么将log.roll.hours配置为1小时可能是一个很好的ID。

请注意,随着清洁程序线程被一起调度,段删除实际上可能在每个代理上的不同时间发生。

使用kafka-configs脚本检查特定主题的配置:

示例: ./bin/kafka-configs --describe --zookeeper localhost:2181 --entity-type topics --entity-name __consumer_offsets