已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】
我们用 Kafka 2.8(3 broker,ISR=3)承载订单状态流转这条关键链路:topic order-state,8 个分区,消费组 8 实例(1:1 部署,保证每个分区内严格顺序)。下游是 MySQL 8.0 写订单表 + 一次 HTTP 通知(同步阻塞,P99 约 120ms,偶发 800ms)。
【现象】
上周一次慢 SQL(锁等待 6s)把其中 1 个实例的 poll 线程卡住超过 max.poll.interval.ms=30000,触发全组 rebalance。rebalance 期间该分区被重新分配,结果出现两类问题:
【已尝试的排查与结果】
max.poll.interval.ms 从 30s 调到 5min,rebalance 风暴确实少了,但单分区卡住时,整组 8 个实例全部空转等待,QPS 从 1200 掉到 0,不可接受。max.poll.records=1 + 每条消息一个事务,顺序保住了,但吞吐直接掉到 80 QPS,也不可行。【期望得到的答案形态】 希望有同学能给出一套具体到配置项和代码结构的方案:
最好能给出一个最小可复现的 PoC(比如 8 分区 / 8 实例 / 注入 6s 慢调用),以及对应的 Prometheus 指标(rebalance 次数、in-flight 消息数、顺序违规告警阈值)。