Kafka生产者幂等性与事务

文章目录

幂等性

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

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

Kafka生产者幂等性

在这里插入图片描述

  • 生产消息重复问题

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

  • 防止重复发送消息:开启kafka的幂等性
  1. 当生产者生产消息时,会给生产者增加一个pid(生产者唯一编号),再给消息增加一个Sequece number(针对消息的一个递增序列)
  2. 发送消息时,会将pid和Sequece number一并发送
  3. partition收到消息,会将pid和Sequece number一并保存下来
  4. 如果ack响应失败,生产者再次发送消息,partition根据pid、Sequece number是否需要再保存这条消息
  5. 判断条件:生产者发送过来的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。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据老人家i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值