怎么保证读取最新数据_Kafka怎么保证数据不丢失?

Kafka怎么保证数据不丢失?

这个问题要从3个方面来保证数据不丢失:生产者、服务端、消费者。

01

producer 生产端是如何保证数据不丢失的

1.ack的配置策略

acks = all (或-1)
生产者在发送消息之后,需要等待ISR中所有的副本都成功写入消息之后才能够收到来自服务端的成功响应,在配置环境相同的情况下此种配置可以达到最强的可靠性。

即:在发送消息时,需要leader 向fllow 同步完数据之后,也就是ISR队列中所有的broker全部保存完这条消息后,才会向ack发送消息,表示发送成功。

2.retries的配置策略

在kafka中错误分为2种,一种是可恢复的,另一种是不可恢复的。

可恢复性的错误:

如遇到在leader的选举、网络的抖动等这些异常时,如果我们在这个时候配置的retries大于0的,也就是可以进行重试操作,那么等到leader选举完成后、网络稳定后,这些异常就会消息,错误也就可以恢复,数据再次重发时就会正常发送到broker端。需要注意retries(重试)之间的时间间隔,以确保在重试时可恢复性错误都已恢复。不可恢复性的错误:

如:超过了发送消息的最大值(max.request.size)时,这种错误是不可恢复的,如果不做处理,那么数据就会丢失,因此我们需要注意在发生异常时把这些消息写入到DB、缓存本地文件中等等,把这些不成功的数据记录下来,等错误修复后,再把这些数据发送到broker端。

3.如何选取

(1)高可用型

  • 配置:acks = all,retries > 0 retry.backoff.ms=100(毫秒) (并根据实际情况设置retry可能恢复的间隔时间)

  • 优点:这样保证了producer端每发送一条消息都要成功,如果不成功并将消息缓存起来,等异常恢复后再次发送。

  • 缺点:这样保证了高可用,但是这会导致集群的吞吐量不是很高,因为数据发送到broker之后,leader要将数据同步到fllower上,如果网络带宽、不稳定等情况时,ack响应时间会更长

(2)折中型

  • 配置:acks = 1  retries > 0 retries 时间间隔设置 (并根据实际情况设置retries可能恢复的间隔时间)

  • 优点:保证了消息的可靠性和吞吐量,是个折中的方案

  • 缺点:性能处于2者中间

(3)高吞吐型

  • 配置:acks = 0

  • 优点:可以相对容忍一些数据的丢失,吞吐量大,可以接收大量请求

  • 缺点:不知道发送的消息是 否成功

02

broker端是如何保证数据不丢失的

unclean.leader.election.enable=false

设置为 false(默认参数为 true),意思是,当存有你最新一条记录的 replication 宕机的时候,Kafka 自己会选举出一个主节点,如果默认允许还未同步你最新数据的 replication 所在的节点被选举为主节点的话,你的数据将会丢失,因此这里应该按需将参数调控为 false;

03

consumer端是如何保证数据不丢失的

在consumer消费阶段,对offset的处理,关系到是否丢失数据,是否重复消费数据,因此,我们把处理好offset就可以做到exactly-once && at-least-once(只消费一次)数据。

当enable.auto.commit=true时

表示由kafka的consumer端自动提交offset,当你在pull(拉取)30条数据,在处理到第20条时自动提交了offset,但是在处理21条的时候出现了异常,当你再次pull数据时,由于之前是自动提交的offset,所以是从30条之后开始拉取数据,这也就意味着21-30条的数据发生了丢失。

当enable.auto.commit=false时

由于上面的情况可知自动提交offset时,如果处理数据失败就会发生数据丢失的情况。那我们设置成手动提交。

当设置成false时,由于是手动提交的,可以处理一条提交一条,也可以处理一批,提交一批,由于consumer在消费数据时是按一个batch来的,当pull了30条数据时,如果我们处理一条,提交一个offset,这样会严重影响消费的能力,那就需要我们来按一批来处理,或者设置一个累加器,处理一条加1,如果在处理数据时发生了异常,那就把当前处理失败的offset进行提交(放在finally代码块中)注意一定要确保offset的正确性,当下次再次消费的时候就可以从提交的offset处进行再次消费。

0698899d2db9b97c03b34242763860b1.png

点一下在看再走吧

2ddb31ae721a0d88a90f498f74a41595.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取模和求余的区别

通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用%符号表示取模或者求余运算。在这里要提醒大家要十分注意当前环境下%运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的。对于整…

计算机转正述职报告ppt,转正述职报告ppt

转正要做述职演讲?出国留学网提供的新员工转正述职报告ppt就是为您量身定做的述职好帮手,希望大家喜欢!前三页预览:延伸阅读——如何做一个好的PPT演讲一个好的PPT演讲不是源于自然,有感而发。并且,一个好的PPT演讲需要演讲者的精…

怎么圆角变直角_衣柜设计个圆角有什么用?效果好看又实用,会这样装的都是老木工...

衣柜设计个圆角有什么用?效果好看又实用,会这样装的都是老木工随着生活水平的不断提高,大家对于生活质量也有着越来越高的期望。从生活起居以及房子的装修中,我们可以看出来。因此家里的东西堆积的也更加的多,这对于储…

不会吸引人的JavaDocs源样本

JavaDoc源代码嵌入很烂! 我喜欢JavaDoc,但年龄不理想。 当您使用其他工具时(例如在Microsoft世界中),突然间,嵌入式示例看起来很棒,并且“搜索”功能已内置! 我们为什么不能拥有它…

浙大计算机硕士比本科985,二本出身的985研究生与985本科生,哪个更厉害?网友:差的太多!...

原标题:二本出身的985研究生与985本科生,哪个更厉害?网友:差的太多!概率,还是概率问题。即便2本考研到985是很优秀,但能优秀到让985本科生服气的还是少数。说到底,是因为考研不是绝对…

cp: omitting directory解决方案

cp: omitting directory是因为目录下面还有目录。应该使用递归方法。需要加入-r参数。 及:cp -r 该目录名。转载于:https://www.cnblogs.com/zipon/p/6391153.html

python 网络服务器框架_Django是Python下的一款网络服务器框架

Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。虽然Django之于Python,达不到Rail之于Ruby的一统江湖的地位,但Django无疑也是Python在网络应用方面的一位…

B系列台达服务器解密码步骤,台达HMI解密,DOP-A解密,DOP-B解密,文件密码解密

DOP-AS35THTD解密,DOP-AS38BSTD解密,DOP-AS57BSTD解密,DOP-A57BSTD解密,DOP-A57CSTD解密,DOP-A57GSTD解密,DOP-A80THTD1解密,DOP-A10TCTD解密,DOP-A10THTD1解密,DOP-AE57BSTD解密,DOP-AE57CSTD解密,DOP-AE57GSTD解密, DOP-AE80THTD解密,DOP-AE94BSTD解密,DOP-AE10THTD解密,DOP-…

Android View相关知识点

View 1,View坐标 Left,Right,Top,Bottom,表示view相对于父控件的距离值,是绝对值,绘制完之后就不会再改变的;X,Y表示view左上角相对于父控件的实时坐标值,是会随着移动view而改变的;TranslationX,TranslationY是view左上角相对于父…

5调用外部浏览器打开代码_浏览器事件循环

浏览器运行过程中会同时面对多种任务,用户交互事件(鼠标、键盘)、网络请求、页面渲染等。而这些任务不能是无序的,必须有个先来后到,浏览器内部需要一套预定的逻辑来有序处理这些任务,因此浏览器事件循环诞生了,再次强…

服务器生成文件怎么配置路径,npm run build生成的文件如何部署到服务器上

其实楼上两个人的回答都是对的,只不过侧重点不一样,一楼是大的方面说,配置好服务器就可以了,该怎么运行就怎么运行,只不过没有部署过项目的人可能就不知道怎么回事了;二楼说的应该是配置windos服务器的环境…

JVM上的高并发HTTP客户端

HTTP可能是最流行的应用程序级别协议,并且有许多库在网络I / O之上实现它,这是常规I / O的一种特殊(面向流)情况。 由于所有I / O都有很多共同点1 ,所以让我们开始对其进行一些讨论。 我将集中讨论具有大量并发HTTP请…

linux下解析域名

linux下解析域名<?xml version"1.0" encoding"UTF-8"?> vi /etc/resolv.confnameserver 208.67.222.222 #opendnsnameserver 208.67.220.220sudo vim /etc/network/interfacesnull转载于:https://www.cnblogs.com/iceiceiceice/p/e64ca5a0b5941c7…

tomcat加白名单_超详细的tomcat管理页面各类型配置总结

概述大部分时候&#xff0c;我们的tomcat服务器都不是部署在本机&#xff0c;那么怎么样不通过ftp/sftp方式来将war包部署到tomcat容器呢&#xff1f;tomcat有提供web页面管理应用的功能。tomcat页面管理进入tomcat默认页面时有“server status”、“manager app”、“Host man…

服务器系统报错kernel-power,第十二讲、Linux服务器操作系统1.ppt

第十二讲、Linux服务器操作系统1.ppt4.1引导与关闭系统 4.1.1 GRUB引导器 GRUB简介 1)grub?是一个多重启动管理器。grub是GRand?Unified?Bootloader的缩写&#xff0c;它可以在?多个操作系统共存时选择引导哪个系统&#xff0c;它不仅可以对各种发行版本的Linux进行引导&am…

Java 关键字 transient

Java 关键字 transient转载于:https://www.cnblogs.com/fysola/p/6394626.html

小程序picker标题_微信小程序-自定义picker选择器

avatar为什么要自定义picker原生小程序picker不支持自定义样式&#xff0c;无联动。该自定组件支持自定义数据支持自定义样式支持传入和返回对象或者基本类型支持联动(改变父列&#xff0c;子列根据关联自动变化)使用直接将picker文件夹拖入工程在某page的json文件中配置{"…

win10系统卷影复制服务器,如何使用Windows卷影拷贝服务恢复文件和文件夹

本文介绍了如何使用Windows卷影拷贝服务恢复文件和文件夹&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;什么是卷影拷贝&#xff1f;从Windows XP SP2和Windows Server 2013开始&#xff0c;微软就向Windows操作系统中引入了一项名叫卷影拷贝的服务(Volume Shadow Co…

openshift s2i_对Openshift上的Play Framework 2应用进行故障排除

openshift s2iOpenshift故障排除 使用“ 自己动手”应用程序类型&#xff0c;您实际上可以有很大的自由度来支持几乎可以在Linux机器上构建和运行的任何框架或服务器。 但是您必须做功课&#xff0c;并做一些研究。 因此&#xff0c;在本文中&#xff0c;我将向您展示一些我在使…

Nginx下配置Http Basic Auth

nginx basic auth指令 第一条语句&#xff1a; 语法: auth_basic string | off;默认值: auth_basic off;配置段: http, server, location, limit_except 默认表示不开启认证&#xff0c;后面如果跟上字符&#xff0c;这些字符会在弹窗中显示。 第二条语句&#xff…