已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】 我们有一条对账链路:Kafka 3.6(3 节点,topic 12 分区)→ 消费者组 6 实例 → MySQL 8.0(单主+1 从,半同步)。消费逻辑:读消息 → 写 MySQL 对账表(REQUIRES_NEW)→ 调用 sendOffsetsToTransaction 把 offset 放进同一个 Kafka 事务 → 事务 commit 后继续。消息量约 800 万条/天,单条处理 P99 约 40ms。
【现象】 上个月两次线上事故:Pod 被 OOMKilled(exit 137)时,日志显示 Kafka 事务已 commit(offset 已推进),但 MySQL 那边该批 3~7 条消息的 INSERT 实际没落盘(从库回查无记录,主库 binlog 里也查不到对应事务)。结果就是这批消息被永久跳过——既不重放(offset 已提交)也没入库,对账出现缺口。
【已尝试的排查与结果】
【期望得到的答案形态】