已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】
我们用 RocketMQ 4.9.7(3 broker 集群)承载「订单状态变更 → 推送下游营销/风控」链路:topic order-status 32 个 queue,消费组 6 实例(K8s Deployment,1 副本 = 1 实例),日均约 8000 万条,P99 单条处理 120ms(主要是 2 次下游 HTTP 调用)。消费模式是 MessageListenerConcurrently,默认拉取。
【现象】
每次 HPA 触发扩缩容(通常 1~2 个 Pod 变更)后 10 分钟内,下游会收到一批重复事件,按 msgId 去重统计,重复率约 0.3%~0.8%。我们抓到一个具体 case:缩容时旧 Pod 被 SIGTERM,优雅退出期间它仍在拉取并处理消息,但它的 offset commit 与新接管实例的 commit 存在竞态,broker 上该 queue 的 consumerOffset 被回退了几百条,新实例重投后旧 Pod 已经处理过的那段被二次处理。另外观察到 rebalance 前后 PullMessage 日志里同一 queueId 短时间内出现两个 clientId 在拉取。
【已尝试的排查与结果】
【期望得到的答案形态】
欢迎带版本号和具体配置来答,数字比结论更有用。