首页 > 其他 > 详细

kafka学习总结005 --- at-exactly-once语义

时间:2020-05-31 18:07:16      阅读:57      评论:0      收藏:0      [点我收藏+]

kafka中有三种语义:

1、at-most-once

在ack超时或者返回错误时,producer不重试,导致消息可能无法写入kafka;这种做法一般是为了减少消息的重复性,而且业务必须接受数据的丢失

2、at-least-once

producer在收到ack时,证明消息已经写入kafka;但是ack超时或者返回错误,producer会尝试重新发送消息;

试想,如果消息已经写入kafka,但是在回复ack时异常,此时会导致消息被写入kafka两次,消费者在处理消息时要做去重处理

3、at-exactly-once

0.11版本的kafka引入了幂等性 ---  无论producer向kafka发送多少相同的消息,kafka知会持久化一条;

也就是说at-least-once + 幂等性 = at-exactly-once

幂等性的原理是什么

启用幂等性:创建生产者时,设置enable.idompotence参数为true;

启用幂等性的生产者在创建的时候会自动分配一个PID,并且发送给同一个分区的消息会携带序列号SeqNum;

broker端缓存<PID, PartitionKey, SeqNum>,当有相同key的消息时,broker只会持久化一条

需要注意的是,

1、幂等性无法跨分区实现at-exactly-once;这是因为PID在生产者重启后会改变,并且不同分区的PartitionKey也不一致

2、启用幂等性后,acks参数的取值一定是all或者-1

kafka学习总结005 --- at-exactly-once语义

原文:https://www.cnblogs.com/sniffs/p/13020034.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!