对于这个问题我们先来看一下一个笑话:
可以这样的实现
kafka设计思想:
Kafka 0.11.0 版本之前并不能保证Exactly-once的语义,只能保证 at-least-once or at-most-once。实际运用中我们并不希望数据丢失,当网络出现问题的时候,我们都会选择重试,所以一般会保证at-least-once。
下面从三个点来讲解:
-
idempotent Producer 设计
-
Transactional Messaging in Kafka 设计
-
Message format 改变
1.Idempotent Producer
我们要保证 Producer 发送数据幂等性,可以给每条数据分配一个UUID,Server 端存储所有的id。接收到数据的时候进行检测&#