Kafka 引入事务(Transactions)机制,主要是为了在分布式流处理环境中实现 “精确一次”(Exactly-Once Semantics, EOS) 语义。 具体来说,Kafka 事务主要是为了解决以下 三大核心场景/问题: 1. 核心场景:消费-处理-生产(Consume-Transform-Produce)循环中的数据重复或丢失问题 这是 Kafka 事务被设计出来的最主要目的。在流处理应用(如 Kafka Streams, Flink)中,最常见的模式是: 1. 从 Topic A(输入主题)读取消息。 2. 在内存中处理/转换这些消息。 3. 将结果写入 Topic B(输出主题)。 4. 提交 Topic A 的消费位移(Offset)。 没有事务时面临的问题: 应用在步骤 3 和 4 之间崩溃:结果已经写入 Topic B,但 offset 没有提交。应用重启后,会重新从旧的 offset 拉取消息,再次处理并写入 Topic B,导致 数据重复(至少一次语义,At-Least-Once)。 应用在步骤 2 和 3 之间崩溃(但提前自动提交了位移):消息没...