能否配置Spring @KafkaListener仅处理同Key的最新消息条目?
Kafka同Key消息消费行为解答
官方依据
任何跟上日志头部进度的消费者都会看到所有写入的消息;这些消息的偏移量是连续的。
问题场景
Kafka主题清理策略设置为[compact,delete],1秒内发送10000条同Key但值随机的消息,Spring @KafkaListener中加入Thread.sleep(5000)模拟消费延迟,咨询监听器会处理全部消息还是仅处理最新一条。
结论与分析
监听器会处理全部10000条消息,原因如下:
- 日志压缩是后台异步执行的清理机制,不会实时拦截新写入的消息。短时间内写入的同Key消息会完整保存在日志头部,不会立即被压缩清理。
- 即便消费者因
Thread.sleep产生延迟,只要没有落后到已被压缩清理的旧日志段,就会接收到所有写入的消息,包括同Key的历史消息。 - 日志压缩仅针对非活跃的日志段,定期清理旧的同Key消息以保留最新值,但这个过程不会影响正在写入的头部日志,也不会干预已经推送给消费者的消息。
内容的提问来源于stack exchange,提问作者Archimedes Trajano
相关产品推荐
相关产品推荐

