kafka-保证数据不重复-生产者开启幂等性和事务的作用?

1. 生产者开启幂等性为什么能去重?

1.1 场景

适用于消息在写入到服务器日志后,由于网络故障,生产者没有及时收到服务端的ACK消息,生产者误以为消息没有持久化到服务端,导致生产者重复发送该消息,造成了消息的重复现象,而幂等性就是为了解决该问题。

1.2 去重原理

通过3个值的唯一性去重:

  1. PID:生产者ID
  2. 分区号
  3. seq:单调递增

2. 生产者开启事务为什么能去重?

2.1 场景

当数据发送到broker时,失败了,导致ack没有应答成功,如果没有开启事务,那么这条数据可能只落在了leader的磁盘上,没有落在flower的磁盘上,此时会进行重试,再把数据发送一遍,那么leader的数据就重复了。

2.2 去重原理

如果开启事务那就会有原子性,数据要么写成功落盘,要么写失败回滚。

当数据发送到broker时,失败了,导致ack应答失败,这条数据可能只落在了leader的磁盘上,没有落在flower的磁盘上,如果开启了事务,那么会进行回滚,将leader的数据回滚,然后会进行重试,再把数据发送一遍,就解决了重复问题。

相关推荐
布鲁飞丝1 天前
kafka 副本集设置和理解
分布式·kafka
香菜TTT2 天前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
java1234_小锋2 天前
【免费】基于Spark实时金融交易风险监控与预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·金融交易风险监控与预测
梦想画家2 天前
FilePulse:Kafka Connect 的“智能文件网关”,重塑数据接入新范式
kafka·文件连接器·filepulse
Devin~Y2 天前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
斯普润布特2 天前
Kafka KRaft 三节点 ARM64 Docker 部署
分布式·kafka
梦想画家2 天前
告别轮询:基于PostgreSQL CDC构建实时数据管道
数据库·postgresql·kafka·实时湖仓
后端观测站2 天前
第一篇:为什么需要消息队列?
kafka·java-rocketmq
重庆小透明2 天前
带你从不同视角了解三大MQ
java·学习·spring·kafka·rabbitmq·rocketmq
L1624763 天前
消息队列(MQ)总览:RabbitMQ & Kafka 完整手册
分布式·kafka·rabbitmq