这是一个非常经典且触及Kafka底层机制的问题(经常出现在高级开发面试中)。 首先需要明确一个核心结论:在严格保持 的前提下,Kafka Broker 端是无法避免重复记录消息的。 在 且发生网络抖动触发重试时,系统的语义变成了 "至少一次 (At-Least-Once)"。Leader Broker 实际上已经把消息写到了本地日志,只是没来得及把 ACK 传回给 Producer。Producer 超时重试,Broker 会将其视为一条全新的消息再次写入,从而产生重复。 要解决这个问题,你需要根据业务的实际需求,从以下几个方向进行破局: --- 方案一:改变配置,启用 Kafka 原生幂等性(推荐,但需放弃 ) 如果你希望 Broker端自动丢弃重复消息,你必须使用 Kafka 0.11 版本引入的 幂等性 Producer ()。 🚨 关键限制: Kafka 强制规定,开启幂等性时,必须满足以下配置,否则启动时会直接抛出 异常: 1. (或 ) —— 不能是 1 2. 3. 原理: 开启幂等性后,Producer 会被分配一个唯一的 PID (Producer ID),并且...