关于日志清理策略的说明

Posted

技术标签:

【中文标题】关于日志清理策略的说明【英文标题】:clarification about log cleanup policies 【发布时间】:2021-10-24 08:52:16 【问题描述】:

如果我理解正确,cleanup.policy 的默认值是 delete,这意味着旧段将在通过配置 log.retention.hourslog.retention.bytes 限制保留时间或大小时被丢弃。

问:

在这种情况下,日志中可能有多个具有不同值的相同键的消息是否正确? null 值(墓碑?)的消息会发生什么,这也是默认值?

如果是这样,如果我理解正确,那么这里有 delete 清理策略,它定义了由 delete.retention.ms 配置的每条记录保留,这既保证最后一个密钥存在,也将删除所有带有 null 的消息价值?

问:

    如果是这样,即使 delete.retention.ms 配置为 1ms,我还能看到带有 null 值的消息吗?

    为了删除日志中的所有消息,我应该更改哪个配置?有可能吗?

    retention.msdelete.retention.ms 是否以某种方式连接?如果是这样 - 采用何种保留政策以及如何实施?

谢谢!

【问题讨论】:

【参考方案1】:

这意味着旧段将在其保留时间或大小限制时被丢弃

封闭段,是的(默认为 1GB 大)。换句话说,500MB 的段将在代理上保留比retention.ms 更长的时间。

[there]日志中可以有多个具有相同键的消息具有不同的值

是的,可以。具有相同键的所有消息最终都在同一个分区中,而带有空键的消息被放入不同的分区中(默认情况下)。


    我猜你是想问为什么你能看到?因为 LogCleaner 在线程间隔上运行,并且只清理关闭的段。消息不会从“这一毫秒”的日志段中截断,尤其是在具有 TB 级数据价值的集群上。

    如果您想完全删除一个主题,而不必等待 LogCleaner 完成其工作,则使用适当的 API 调用来删除主题,而不是使用保留设置 purge a topic

    delete.retention.ms压缩主题的设置。 retention.ms 用于 cleaup.policy=delete 主题

【讨论】:

谢谢,@OneCricketeer,您能否编辑您的答案并提供我应该更改的配置(2.)我没有命令清除该主题?还安排 LogCleaner 的时间?关于“是的,可以” - 它可以发生在压缩政策上吗?因为它应该只留下最后一个,以及它删除的具有空值的键,你能详细说明一下这个过程吗? 阅读相关配置的链接帖子。压缩主题不能有空键。压缩只发生在关闭的日志段上,并且是“脏比”属性的函数。没有时间保证日志清理线程将运行(有时它们甚至在没有日志的情况下崩溃)。您可以使用代理属性添加更多线程

以上是关于关于日志清理策略的说明的主要内容,如果未能解决你的问题,请参考以下文章

Kafka日志清理之Log Deletion

Kafka的2种日志清理策略感受一下

lightdb-归档日志清理

lightdb-归档日志清理

物化视图日志过大,手工清理

关于日志文件的清除。