Kafka学习笔记 --- 如何实现Kafka消息的Exactly-Once

对于这个问题我们先来看一下一个笑话:

 

Kafka学习笔记 --- 如何实现Kafka消息的Exactly-Once_第1张图片

 

 

可以这样的实现

 

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。接收到数据的时候进行检测,如果重复就拒绝。这样的设计有一个问题就是算法复杂度的问题,我们需要匹配所有的消息的UUID。所以我们需要一个对空间资源要求低且查询速度快的设计思路。

 

我们可以给 Producer 分配一个PID,message分配一个自增的sequence n

你可能感兴趣的:(大数据挖掘与大数据应用案例)