当Kafka主题保留时间大于log.roll.ms时的处理逻辑及查询问题
Kafka主题保留时间大于broker log.roll.ms时的机制与查询说明
一、数据删除机制运作逻辑
- Kafka的日志删除是基于分段文件(log segment) 执行的,不会针对单条消息单独处理。当主题设置的
retention.ms(保留时间)大于broker级别的log.roll.ms时:- 日志分段会严格按照
log.roll.ms的时间间隔(或同时满足文件大小阈值log.segment.bytes)滚动生成新的分段文件; - 后台删除线程只会判断整个分段文件的最后一条消息的时间戳:当该时间戳早于「当前时间 - 主题retention.ms」时,这个分段才会被标记为待删除,随后被清理;
- 和你之前遇到的「retention.ms < log.roll.ms」场景相反:反向场景下,分段会按时滚动,但只要分段里还有消息没到主题保留期,整个分段就不会被删除。
- 日志分段会严格按照
二、AKHQ的数据查询可用性
- 只要目标分段文件还未被Kafka后台线程彻底清理,AKHQ就能正常查询到该分段内的所有消息;
- 只有当分段被完全删除后,对应的数据才会从AKHQ的查询结果中消失。
内容的提问来源于stack exchange,提问作者Xli
相关产品推荐
相关产品推荐

