当前位置: 首页 > news >正文

Kafka(十一) 如何保证数据的不重复和不丢失

数据不丢失

1)从生产端:acks = -1,(ack应答机制)从生产端到节点端,当所有isr集合里的节点备份完毕后返回成功;

2)从节点端:每个partition至少需要一个isr节点(同步)存活保证数据安全

3)从消费端:关闭自动提交,使用手动提交。

数据不重复消费

1)生产端

生产者幂等性实现:PID和Sequence Number

为了实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。 PID:每个新的Producer在初始化的时候会被分配一个唯一的PID,这个PID对用户是 不可见的。

Sequence Numbler:对于每个PID,该Producer发送数据的每个<Topic, Partition> 都对应一个从0开始单调递增的Sequence Number。

Broker端在缓存中保存了这seq number,对于接收的每条消息,如果其序号大于Broker 缓存中序号则接受它,否则将其丢弃。这样就可以避免消息重复提交了。

但是,只能保证单个Producer对于同一个<Topic, Partition>的Exactly Once语义。不能保证同一个Producer一个topic不同的partion幂等。

2)消费端

消费者幂等处理

1.将消息的offset存在消费者应用中或者第三方存储的地方,可以将这个数据存放在redis或者是内存中,消费消息时,如果有这条数据的话,就不会去做后续操作

2.数据落库的时候,根据主键去过滤

在落库时,如果不存在这条数据,则去新增,如果存在则去修改,如果不能幂等处理,则将consumer的提交方式设置为同步提交,是最大程度地保证一致性的方法,缺点是性能会降低很多。

传递一次。将 offset 作为唯一 id 与消息同时处理,并且保证处理的原子性。消息只会处理一次,不丢失也不会重复。但这种方式很难做到。

kafka 默认的模式是 at least once ,但这种模式可能会产生重复消费的问题,所以在业务逻辑必须做幂等设计。

使用 exactly Once + 幂等操作,可以保证数据不重复,不丢失。

http://www.lryc.cn/news/22915.html

相关文章:

  • 解决树莓派 bullseye (11) 系统无法通过 xrdp 远程连接的问题
  • 微信公众号历史作品定向采集
  • Vue学习笔记(3)
  • Marshmallow 库
  • 【BN层的作用】论文阅读 | How Does Batch Normalization Help Optimization?
  • re.sub()用法的详细介绍
  • 【Python数据挖掘入门】2.2文本分析-中文分词(jieba库cut方法/自定义词典load_userdict/语料库分词)
  • Meta利用视觉信息来优化3D音频模型,未来将用于AR/VR
  • openlayers加载离线地图并实现深色地图
  • socket,tcp,http三者之间的区别和原理
  • 红日(vulnstack)1 内网渗透ATTCK实战
  • ik 分词器怎么调用缓存的词库
  • ROS1/2机器人操作系统与时间Time的不解之缘
  • 华为OD机试真题2022(JAVA)
  • 【3】MyBatis+Spring+SpringMVC+SSM整合一套通关
  • 20道前端高频面试题(附答案)
  • android EditText设置后缀
  • prometheus+cadvisor监控docker
  • 正演(1): 二维声波正演模拟程序(中心差分)Python实现
  • 珠海数据智能监控器+SaaS平台 轻松实现SMT生产管控
  • 习题22对前面21节的归纳总结
  • 使用Vite快速构建前端React项目
  • 人工智能高等数学--人工智能需要的数学知识_微积分_线性代数_概率论_最优化---人工智能工作笔记0024
  • 阿里大数据之路总结
  • ABAP中Literals的用法(untyped literal vs. typed literal)
  • tensorflow1.14.0安装教程
  • C++赋值运算符重载
  • 网络性能总不好?专家帮你来“看看”— CANN 6.0 黑科技 | 网络调优专家AOE,性能效率双提升
  • Qss自定义属性
  • 连接金蝶云星空,数据交互轻松搞定!丨三叠云