kafka服务端清除数据后,消费者仍能消费过期的数据!!

Healer 发表于: 2022-11-23   最后更新时间: 2022-11-23 02:37:58   1,512 游览

kafka服务端配置的日志保存时间为72H, 但是据业务反馈,在11/14日生产消息且消费者立即消费了,在11/19日重启后重复消费了11/14日生产的消息(据消费者日志来看, 消息的partiton与offset还有消息体完全一致)!

非常疑惑: 根据配置的数据保存时间72H来看, 11/14日生产的数据在11/19日之前早就被删除了, 为什么消费端还能消费呢?

发表于 2022-11-23
添加评论

应该是文件句柄没有正常释放,由于某些程序还在占用,导致文件并没有真正删除,所以消费还能消费到。

用 lsof | grep deleted 查看是否有对应的kafka日志文件,应该就能判断。

通过消费者命令,获取最早的消息,打印创建时间戳

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --property print.timestamp=true --max-messages 5

看看你获取的命令时间是否符合你的过期时间。

Healer -> 半兽人 2年前

消费者打印了ConsumerRecord,据日志来看重复消费的消息完全一致,包括Createtime

半兽人 -> Healer 2年前

你现在还能查到之前的数据?

Healer -> 半兽人 2年前

现在已经查不到了, 但是根据消费者日志看,确实是在相隔5天之后重复消费了同一条消息

半兽人 -> Healer 2年前

你现在查看,返回的数据,时间是否是正常的呢?

Healer -> 半兽人 2年前

时间是正常的, 跟系统时间完全一致, 消费者commit timestamp也是正确的

半兽人 -> Healer 2年前

那就是说,现在你的kafka集群数据过期策略一切正常,不会查到3天前的数据。

Healer -> 半兽人 2年前

过期策略是正常的, 就是不知道为什么数据过期之后, 消费端还能消费到o(╥﹏╥)o

你的答案

查看kafka相关的其他问题或提一个您自己的问题