Exactly-once Semantics are Possible: Here’s How Kafka Does it
Official Docs
Idempotent ProducerTransactional Messaging in KafkaKIP-98 - Exactly Once Delivery and Transactional Messaging:Transactions feature,以Idempotent Producer和Transactional Messaging in Kafka为基础,阐述了如何实现如下的目标
- 基于Producer Identifiers(PIDs)构建的可以用来消除针对一个TopicPartition的重复消息的Idempotent Producer
- 跨Topic Partition写和更新offset 的能力
- Consumer支持只获取所在事务已经commit的消息
KIP-129: Streams Exactly-Once Semantics:基于KIP-98阐述的能力,在Kafka Stream API中出现各种失败情况时,以用户(业务应用开发者)透明的方式,提供强语义:使用Kafka Streams API,从各个Topic拉取的消息将只被处理一次,此消息的处理结果,不管是对state store的更新还是process之后用于发送到kafka 输出topic的结果消息,都将只成功执行一次;也就是说,拉取输入消息,处理消息,更新state store,输出结果这四个操作,是在一个事务中,要么全部成功,要么全部失败;
KIP-192 : Provide cleaner semantics when idempotence is enabled
Exactly Once Delivery and Transactional Messaging in Kafka:KIP-98的设计文档,包含所有的实现细节
Streams Exactly Once Design:KIP-129的设计文档,包含所有的实现细节
Blogs
Kafka 事务性之幂等性实现Kafka Exactly-Once 之事务性实现
Exactly-once Semantics in Apache KafkaTransactions in Apache KafkaKafka Exactly Once Semantics