怎么保证读取最新数据_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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

JVM上的高并发HTTP客户端

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

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

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

Nginx下配置Http Basic Auth

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

服务器多核性能排行,服务器内存多核性能

服务器内存多核性能 内容精选换一换本文介绍了弹性云服务器ECS的功能发布和对应的文档动态,新特性将在各个区域(Region)陆续发布,欢迎体验。关于弹性云服务器(ECS)更多历史版本变更内容,请单击“查看PDF”详细了解。超高I/O型弹性云服务器使用…

从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同

例一:毛刺在往外凸的面上 策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。 1 read_image (Tu, C:/Users/xiahui/Desktop/tu.jpg) 2 binary_threshold (…

买服务器带操作系统,买服务器带操作系统

买服务器带操作系统 内容精选换一换只有运行中的弹性云服务器才允许用户登录。Linux操作系统用户名“root”。忘记密码,请先通过“重置密码”功能设置登录密码。重置密码:选中待重置密码的云耀云服务器,并选择“操作”列下的“ 重置密码”。重…

自定义sql_【PL/SQL 自定义函数】 常用场景

看完这章后你会学习到以下内容:1.练习场景2.面试场景3.工作应用场景总览思维导图:面试部分:1.创建函数,从emp表中查询指定员工编号的职工的工资CREATE OR REPLACE FUNCTION CHECK_SAL(F_EMPNO IN EMP.EMPNO%TYPE) RETURN NUMBER ISV_SAL VARC…

进阶– Java EE 7前端5强

系列继续。 在初步概述和Arjan关于最重要的后端功能的文章之后 ,我现在非常高兴让Ed Burns( edburns )使用他最喜欢的Java EE 7前端功能完成本系列。 感谢Markus Eisele让我有机会在他非常受欢迎的博客上发表帖子。 我和Markus的关系可以追溯…

一杯水怎么测试_一杯水就能鉴别翡翠真假的高招

大家好,小生有礼!鄙人是秋玉蝉珠宝的杨杨,很高兴能在茫茫互联网中相识就是有缘。先简单介绍一下秋玉蝉珠宝,我们是年轻的品牌,我们的理念一直秉承坚持做真翡翠,好翡翠,把握翡翠的精髓&#xff0…

php连接mysql_PHP连接MySQL数据库的三种方式

本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo),结合实例形式分析了PHP基于mysql、mysqli、pdo三种方式连接MySQL数据库的相关操作技巧与注意事项。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助…

idea内置junit5_JUnit的内置Hamcrest Core Matcher支持

idea内置junit5在通过JUnit和Hamcrest改善对assertEquals的文章中,我简要讨论了Hamcrest “ 核心 ”匹配器与JUnit的现代版本“结合”在一起的情况。 在那篇文章中,我特别关注了JUnit的assertThat(T,Matcher)静态方法与…

jenkins 发送邮件模板

jenkins 发送邮件模板 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>${ENV, var"JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head><body leftmargin"8" marginwidth"…

Oracle Spring Clean JavaFX应该吗?

我们确实在Codename One上依赖JavaFX&#xff0c;我们的模拟器需要它。 我们的桌面版本使用它&#xff0c;而我们的设计器工具基于Swing。 我们希望它成功&#xff0c;这对我们的业务至关重要&#xff01; 即使您是Java EE开发人员并且不关心桌面编程&#xff0c;我们也不是一个…

laravel mysql 锁表_Laravel中MySQL的乐观锁与悲观锁

MySQL/InnoDB的加锁&#xff0c;是一个老生常谈的话题。在数据库高并发请求下&#xff0c;如何兼顾数据完整性与用户体验的敏捷性是一代又一代程序员一直在思考的问题。乐观锁乐观锁之所以叫乐观&#xff0c;是因为这个模式不会对数据加锁。而是对数据操作保持一种乐观的心态&a…

mysql 超长记录_谁记录了mysql error log中的超长信息(记pt-stalk一个bug的定位过程)...

【问题】最近查看MySQL的error log文件时&#xff0c;发现有很多服务器的文件中有大量的如下日志&#xff0c;内容很长(大小在200K左右)&#xff0c;从记录的内容看&#xff0c;并没有明显的异常信息。有一台测试服务器也有类似的问题&#xff0c;为什么会记录这些信息&#xf…

glassfish发布应用_Arquillian 1.0.0.Final正式发布! 准备使用GlassFish和WebLogic! 所有虫子死亡!...

glassfish发布应用红帽公司和JBoss社区今天宣布的1.0.0.Final发布的Arquillian &#xff0c;其屡获殊荣的建在Java虚拟机&#xff08;JVM&#xff09;运行测试平台。 Arquillian大大减少了编写和执行Java中间件集成和功能测试所需的工作。 它甚至使测试工程师能够解决以前认为无…

使用ADF列表视图的主从数据

最近&#xff0c;从UI角度来看&#xff0c;ADF Faces 表组件不再被认为很酷。 对于显示数据集合&#xff0c; 列表视图今天应该很酷。 这并不意味着我们根本不应该使用af&#xff1a;table 。 在某些情况下&#xff08;经常是:)&#xff09;&#xff0c;表比列表视图更适合。 但…