3.6. 使用数据保留策略管理日志
Kafka 使用日志来存储消息数据。日志(日志)是与各种索引关联的一系列片段。新消息被写入 活跃的 片段,之后永远不会修改。从消费者获取请求时读取片段。有时候,活跃段会滚动到变为只读,一个新的活跃段会被创建来替代它。每次仅激活一个片段。旧的片段会保留下来,直到它们有资格删除。
代理级别的配置设置日志片段的最大大小(以字节为单位),以及滚动活跃片段前的毫秒为单位:
# ... log.segment.bytes=1073741824 log.roll.ms=604800000 # ...
# ...
log.segment.bytes=1073741824
log.roll.ms=604800000
# ...
您可以使用 segment.bytes 和 segment.ms 在主题级别上覆盖这些设置。无论您需要降低还是提升这些值,都取决于删除网段的策略。较大的大小表示活动片段包含更多信息,而且经常进行推广。细分市场也成为对删除条件的资格。
您可以设置基于时间或基于大小的日志保留和清理策略,以便日志保持可管理。根据您的要求,您可以使用日志保留配置来删除旧的片段。如果使用日志保留策略,则在达到保留限制时会删除非活跃日志片段。删除旧的片段会绑定日志所需的存储空间,因此不会超过磁盘容量。
对于基于时间的日志保留,您可以根据小时、分钟和毫秒设置保留周期。保留周期基于在网段中附加信息的时间。
毫秒毫秒的配置优先于分钟,而优先级超过小时。默认情况下,minutes 和 毫秒的配置是 null,但这三个选项提供了对您要保留的数据的大量控制级别。首选应以毫秒为单位指定,因为它是唯一可动态更新的三个属性之一。
# ... log.retention.ms=1680000 # ...
# ...
log.retention.ms=1680000
# ...
如果 log.retention.ms 设为 -1,则不会应用时间限制来记录保留,因此所有日志都会被保留。通常不建议监控磁盘用量,但通常不建议使用 -1 设置,因为它可能会导致完整磁盘出现问题,这可能会很难重新处理。
对于基于大小的日志保留,您需要设置一个最大日志大小(日志中所有片段)以字节为单位:
# ... log.retention.bytes=1073741824 # ...
# ...
log.retention.bytes=1073741824
# ...
换句话说,日志通常将有大约 log.retention.bytes/log.segment.bytes 段,当它达到稳定状态。当达到最大日志大小时,会删除旧的片段。
使用最大日志大小的一个潜在问题是,它不会考虑将消息附加到网段的时间。您可以使用基于时间和基于时间的日志保留来使您的清理策略达到所需的平衡。达到哪个阈值首先触发清理。
如果要在从系统中删除片段文件前添加时间延迟,您可以使用 log.segment.delete.delay.ms 在代理级别或 file.delete.delay.ms 中针对特定主题的 log.segment.delete.delay.ms 添加延迟。
# ... log.segment.delete.delay.ms=60000 # ...
# ...
log.segment.delete.delay.ms=60000
# ...