Kafka生产者幂等性与事务

文章目录

  • 幂等性

幂等性

简介
拿http举例来说,一次或多次请求,得到的响应是一致的(网络超时等问题除外),换句话说,就是执行多次操作与执行一次操作的影响是一样的。
在这里插入图片描述

如果,某个系统是不具备幂等性的,如果用户重复提交了某个表格,就可能会造成不良影响。例如:用户在浏览器上点击了多次提交订单按钮,会在后台生成多个一模一样的订单。

Kafka生产者幂等性
在这里插入图片描述

生产消息重复问题

kafka生产者生产消息到partition:默认会将消息保存到分区中,并返回一个ack给生产者,表示当前发送消息的动作是否成功,如果ack响应失败了,此时生产者会再次将上一条消息继续进行发送,此时kafka又会保存一条一模一样的数据。

防止重复发送消息:开启kafka的幂等性

当生产者生产消息时,会给生产者增加一个pid(生产者唯一编号),再给消息增加一个Sequece number(针对消息的一个递增序列)
发送消息时,会将pid和Sequece number一并发送 partition收到消息,会将pid和Sequece
number一并保存下来 如果ack响应失败,生产者再次发送消息,partition根据pid、Sequece
number是否需要再保存这条消息 判断条件:生产者发送过来的Sequece number 是否小于等于partition中的sequece
number,如果小于,则不保存,反之则保存

配置幂等性

props.put("enable.idempotence",true);

幂等性原理

为了实现生产者的幂等性,Kafka引入了 Producer ID(PID)和 Sequence Number的概念。
在这里插入图片描述

PID:每个Producer在初始化时,都会分配一个唯一的PID,这个PID对用户来说,是透明的。
Sequence Number:针对每个生产者(对应PID)发送到指定主题分区的消息都对应一个从0开始递增的Sequence Number。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值