Kafka 学习(三)kafka 生产者幂等性

简介

幂等性:执行多次操作与执行一次操作的影响一致

kafka 生产者幂等性

kafka 生产者生产消息到 partition
如果直接发送消息,kafka 会将消息保存到分区中,但 kafka 会返回一个ACK 给生产者,标识当前操作是否成功,是否已经保存了这条消息。
如果 ACK 响应失败,生产者会重试,继续发送未发送成功的消息,kafka 又会保存一条一模一样的问题

配置幂等性

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

幂等性原理

kafka 有一个 Producer ID 和 Sequence Number 的概念

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

步骤:

  1. kafka 发送消息携带 PID 和 Sequence Number 发送
  2. kafka 收到消息,一并保存下来。
  3. ACK 响应失败后,生产者重试,再次发送消息,根据 pid、 Sequence Number 判断是否需要再保存一条消息
  4. 判断条件:生产者发送的 Sequence Number 是否小于等于 partition 中消息对应的 sequence Number
  5. 成功保存消息,当前发送的 sequence Number = 0,spid 对应的 sequence 不保存消息
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一起来搬砖呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值