3.7. 使用清理策略删除日志数据


删除旧日志数据的方法由 日志清理 配置决定。

默认情况下,代理启用了 log cleaner:

# ...
log.cleaner.enable=true
# ...

如果您使用日志压缩清理策略,则需要启用日志清理器。您可以在 topic 或 broker 级别设置清理策略。broker-level 配置是没有策略集的主题的默认设置。

您可以设置策略来删除日志、紧凑日志或两者都:

# ...
log.cleanup.policy=compact,delete
# ...

删除策略 与使用数据保留策略来管理日志对应。当数据不需要永久保留数据时,它很合适。紧凑 策略保证保留每条消息键的最新消息。日志压缩非常适合消息值可更改,而您想要保留最新更新。

如果清理策略被设置为删除日志,则会根据日志保留限制删除旧的片段。否则,如果没有启用日志清理器,且没有日志保留限制,日志将继续增大。

如果为日志压缩设置了 cleanup 策略,日志的 条作为标准 Kafka 日志运行,并按顺序写入附加新消息。在紧凑日志的 尾部,如果日志清理器运行,则在日志中会发生具有相同键的另一个记录,则会删除记录。具有 null 值的消息也会被删除。如果您不使用密钥,则无法使用压缩,因为需要密钥来识别相关信息。虽然 Kafka 保证每个密钥的最新消息都会被保留,但它不能保证整个紧凑的日志不包含重复。

图 3.1. 在压缩前显示键值写入使用偏移位置的写入

显示键值写入的压缩镜像

使用密钥来识别信息,Kafka 压缩为特定消息键保留最新的信息(使用最高偏移量),最终丢弃了具有相同密钥的先前消息。换句话说,其最新状态的消息始终可用,当日志清理器运行时,该特定消息的任何过期记录都将最终删除。您可以将消息恢复回以前的状态。

记录会保留其原始偏移,即使周围的记录被删除。因此,tail 可能会具有非协调误差。当消耗在 tail 中不再可用的偏移值时,会找到带有下一较高偏移的记录。

图 3.2. 压缩后的日志

日志清理后压缩镜像

如果只选择紧凑策略,则日志仍然可以成为任意大。在这种情况下,您可以将策略设置为紧凑删除日志。如果您选择紧凑并删除日志,则首先删除日志数据,在日志头部使用键删除记录。之后,删除日志保留阈值前的数据。

图 3.3. 日志保留点和压缩点

带有保留点的压缩镜像

您可以设置日志的频率以毫秒为单位进行清理:

# ...
log.retention.check.interval.ms=300000
# ...

调整与日志保留设置相关的日志保留检查间隔。较小的保留大小可能需要更频繁地检查。

清理的频率应该足以管理磁盘空间,但通常不会影响主题的性能。

如果没有要清理的日志,您也可以以毫秒为单位设置一个时间,以将清理设置为待机:

# ...
log.cleaner.backoff.ms=15000
# ...

如果选择删除旧的日志数据,您可以在清除前以毫秒为单位设置保留删除的数据的周期:

# ...
log.cleaner.delete.retention.ms=86400000
# ...

删除的数据保留周期可让时间注意到数据已消失,然后再被删除。

要删除与特定密钥相关的所有消息,生产者可以发送 tombstone 消息。tombstone 具有 null 值,并充当一个标记来告知消费者值被删除。在压缩后,只有 tombstone 会被保留,这必须在足够长的时间段内才可知道该消息已被删除。当旧的消息被删除时,没有值,则会从分区中删除 tombstone 密钥。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部