Kafka compact清理策略配置咨询:分段满时是否会删除旧数据?
Kafka Compact策略配置疑问解答
一、哪些配置会影响Compact策略,导致旧数据丢失?
即使设置了cleanup.policy=compact,以下配置仍可能触发旧数据删除:
retention.ms:若设置非-1的值,数据存储时间超过阈值后,无论是否完成compact都会被删除。retention.bytes:若设置非-1的值,topic总数据量超过阈值时,旧segment会被删除,哪怕还未完成compact。delete.retention.ms:控制墓碑消息(值为null的记录,用于标记键删除)的保留时长。超时后墓碑消息会被清理,若后续无该键的新记录,compact后该键的所有旧数据会被彻底移除。segment.ms:若设置较小值,会触发segment提前滚动(即使未达到segment.bytes=1GB)。滚动后的旧segment若触发retention相关删除条件,也会被删除。
另外,如果cleanup.policy同时包含compact和delete(如cleanup.policy=compact,delete),数据会受两种策略共同影响,更容易触发删除。
二、Compact策略下如何配置实现永久保留数据?
要实现数据永久保留,需调整以下关键配置:
- 确保
cleanup.policy仅设置为compact,不要添加delete - 设置
retention.ms=-1:关闭按时间触发的删除策略 - 设置
retention.bytes=-1:关闭按总数据量触发的删除策略 - 调大
delete.retention.ms:建议设置为Long类型最大值9223372036854775807,避免墓碑消息被过早清理,防止对应键的历史数据被误删 - 可选:设置
min.compaction.lag.ms=0,确保数据可以及时被compact,且不会因延迟触发删除(不需要延迟compact时使用)
注意:如果业务中发送了墓碑消息(null值记录),即使配置了上述参数,该键的旧数据在compact后会被移除,墓碑消息也会在delete.retention.ms到期后删除。若要完全保留所有历史数据,请勿发送墓碑消息。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

