SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递

背景

生产环境有一个微服务,定时扫库找到发生变化的数据,然后发送kafka消息。另一个微服务会接收消息进行消费。之前一直跑的好好的,最近忽然出现消息大量积压并且一直无限循环投递的情况。

因为定时扫库的任务中有动态开关,第一时间就把开关关掉了。按道理说,就不应该再有消息发出来,但是consumer还在不停的消费消息,那么这些消息是哪来的?

原因

查看日志:

plain 复制代码
2026-03-23T20:21:35: consumer poll timeout has expired. This means the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time processing messages. You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.
2026-03-23T20:21:35: Member consumer-quick-group-1-7158d065-c551-495c-8cb0-b1f10c41d797 sending LeaveGroup request to coordinator localhost:9092 (id: 2147483646 rack: null isFenced: false) due to consumer poll timeout has expired.
2026-03-23T20:21:35: Resetting generation and member id due to: consumer pro-actively leaving the group
2026-03-23T20:21:35: Request joining group due to: consumer pro-actively leaving the group

大概的意思是consumer处理poll()出来的消息时间太长导致超时了,然后消费者被认为是挂掉了,发生了rebalance,然后消息重新投递了回来。这里也提到了一个参数max.poll.interval.ms:

The maximum delay between invocations of poll() when using consumer group management. This places an upper bound on the amount of time that the consumer can be idle before fetching more records. If poll() is not called before expiration of this timeout, then the consumer is considered failed and the group will rebalance in order to reassign the partitions to another member.

使用消费者组管理时,两次调用 poll() 之间的最大延迟。这设定了消费者在获取更多记录前可以空闲的时间上限。如果在超时到期前未调用 poll(),则该消费者被视为失败,消费者组将进行重平衡,以便将分区重新分配给其他成员。

默认情况下,这个超时时间是5分钟。在我们的场景中,单个消费者的处理时间会比较长,恰好最近因为某些操作导致消息数量忽然增加,导致一次poll()出来的消息数量比较多,在5分钟以内没有处理完所有的消息,然后发生了rebalance,导致无限循环。

更多细节请参考:https://mp.weixin.qq.com/s/apTCAcYcQDGk0eMNxGbfMQ

相关推荐
AI深栈3 小时前
第 10 章 · Embedding、VectorStore 与 RAG
java·人工智能
Java内核笔记3 小时前
Spring Boot 4 SSRF 防护源码剖析:InetAddressFilter 挡住内网地址与云元数据
java·后端
白远山3 小时前
健身场馆无人自动化系统实战指南:从架构设计到部署全流程解析
java·开发语言·架构·需求分析
user_admin_god3 小时前
第 09 篇:实践一 —— 文本摘要(Map-Reduce 分块)
java·人工智能·spring boot·语言模型
咖啡八杯3 小时前
Controller 基类封装:BaseController 的模板方法设计
java·架构·设计
vx_BS813303 小时前
【项目编号:project49759】Spring Boot 宠物综合服务平台:商城、预约、咨询、活动与健康档案的一体化实现
java·spring boot·eclipse·tomcat·intellij-idea
她的男孩3 小时前
加了 @Idempotent 还是重复扣款了 3 笔:扒完 1279 行幂等 Starter,我挖出 5 个隐蔽的坑
java·后端·架构
步行cgn4 小时前
Spring 注入内部 Bean 详解
java·spring·rpc
user_admin_god4 小时前
第 05 篇:结构化输出 —— 让模型稳定返回 JSON
java·人工智能·spring boot·语言模型
土司大王4 小时前
LeetCode hot100——394.字符串解码:Java 双栈模拟
java·算法·leetcode