博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kafka数据不丢失不重复_Kafka 之 如何保证数据不丢失?不重复?
阅读量:5732 次
发布时间:2019-06-18

本文共 713 字,大约阅读时间需要 2 分钟。

数据不丢失

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发送数据的每个 都对应一个从0开始单调递增的Sequence Number。

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

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

2)消费端

消费者幂等处理:

1.将消息的offset存在消费者应用中或者第三方存储的地方

可以将这个数据存放在redis或者是内存中,消费消息时,如果有这条数据的话,就不会去做后续操作

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

在落库时,如果不不在这条数据,则去新增,如果存在则去修改

如果不能幂等处理,则将consumer的提交方式设置为同步提交,是最大程度地保证一致性的方法,缺点是性能会降低很多。

转载地址:http://ftowx.baihongyu.com/

你可能感兴趣的文章
你是谁不重要,关键是你跟谁!
查看>>
CSS中规则@media的用法
查看>>
pychecker:分析你的python代码
查看>>
关于linux上安装网络打印机
查看>>
css 默认不显示 之后显示
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
使用Azure Storage进行静态Web托管
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
XT [2011-06-25]更新到0.41版本
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>