生产者重复幂等处理《九》

Exactly Once
把服务器的ACK设置为-1,可以保证Producer到Server之间不会丢失数据,即At Least Once语义,至少发一次
服务器ACK设置为0,每条消息只会发一次,即At Most Once语每条消息最多发一次。、


kafka 0.11之前是有缺陷的的只能保证数据不丢失,至于从重复问题只能在下游去重。

0.11版本之后kafaka提供了幂等性,即Producer无论向Server发送多少次重复数据,Server端都只会持久化一条。
KAFA 的Exactly Once语义,
At Least  Once  +幂等性=ExactLy Once 



启用幂等性:要将Producer的参数中的enable.idompotence设置为true
开启幂等性的Producer在初始化的时候会被分配一个PID,发往同一个分区的Partition的消息会附带 Sequence Number。
而Broker端会对<PID,Partition,SequenceNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条。 但是当PID重新变化,同时不同的Partition也具有不同的主键,所以幂等性无法保跨分区会话的Exaclatly Once

 

只能解决单个会话单个分区的数据的幂等性。当生产者重启后PID变化幂等性就不会保证只有一条

 

上一篇:RocketMQ架构原理解析(四):消息生产端(Producer)


下一篇:Spring Boot 第一个示例 “main” 方法