在分布式系统中,实现“恰好一次”(Exactly-Once Semantics, EOS)是非常困难的,因为网络故障、节点宕机随时可能导致消息丢失或重复。 Apache Kafka 从 0.11 版本开始,正式支持了 Exactly-Once 语义。Kafka 实现这一目标的基石可以分为三个核心维度:幂等性生产者(Idempotent Producer)、事务(Transactions),以及读已提交(Read Committed)消费者。 以下是 Kafka 支持 Exactly-Once 语义的详细底层机制: --- 第一层:幂等性(Idempotence)—— 解决单分区单会话的重复 在没有幂等性之前,如果 Producer 发送消息到 Broker 后,网络出现闪断,Producer 没有收到 ACK,就会触发重试,从而导致 Broker 端产生重复消息。 开启方式: Producer 配置 。 底层机制: 1. PID (Producer ID): 当 Producer 启动时,Broker 会为其分配一个唯一的 PID。 2. Sequence Number (序列号...