文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kafka保证零数据丢失的配置方案

2023-06-02 00:29

关注

本篇内容介绍了“Kafka保证零数据丢失的配置方案”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

如果要想保证Kafka数据不丢, 要从Kafka的三个地方入手:生产者、服务端和消费者。

生产者

01 /  API使用
在生产中Kafka生产者的开发我们都会用异步调用的方式,异步调用方式有如下两个API:

1)producer.send(msg)    不带回调方法2)producer.send(msg,callback)   带回调方法


记得要使用带有回调方法的API,我们可以根据回调函数得知消息是否发送成功,如果发送失败了我们要进行异常处理,比如存储到其他介质来保证消息不丢。
02 /  acks参数设置

acks这个参数有三个值:0,1,-1,但是不同的参数对应的含义不同,那如果我们想要保证数据不丢,acks值应该设置为哪个参数呢?请看下面的表格:

0
代表生产者只要把消息发送出去以后就认为消息发送成功了,这种方式有可能会导致数据丢失,因为有可能消息发送到服务端以后服务端存储失败了。
1

代表生产者把消息发送到服务端,服务端的leader replica 副本写成功以后,就返回生产者消息发送成功了,这种方式也有可能会导致丢数据,因为有可能刚好数据写入到leader replica,然后返回处理成功的响应给生产者,假如这个时候leader replica在的服务器出问题了,follower replica还没来得及同步数据,这个时候是会丢数据的。
-1(all)

代表生产者把消息发送到服务端,服务端的ISR列表里所有replica 都写入成功以后,才会返回成功响应给生产者。假设ISR列表里面有该分区的三个replica(一个leader replica,两个follower replica),那么acks=-1就意味着消息要写入到leader replica,并且两个follower replica从leader replica上同步数据成功,服务端才会给生产者发送消息发送成功的响应。

所以ISR列表里面的replica就非常关键。如果我们想要保证数据不丢,那么acks的值设置为-1,并且还需要保证ISR列表里面是1个副本以上,具体由哪个参数控制,看下面的服务端的配置。

所以acks的值要设置为-1。

03 /  重试次数设置所以acks的值要设置为-1。

为了保证数据不丢,我们尽可能的设置较大的重试次数(参数是retries),如果重试失败了,对异常进行处理,可以把消息保存到另外安全到地方。

服务端

01 / unclean.leader.election.enable

这个参数是控制leader replica出问题了以后follower replica竞选leader replica资格的,我们把设置为false,意思就是如果follower replica如果落后leader replica太多就不能参与竞选。
02 /  replication.factor
这个参数设置的是partition副本的个数,如果我们要想保证数据不丢,这个副本数需要设置成大于1。
03 /  min.insync.replicas

这个参数要跟生产者里的acks参数配合使用,当生产者acks=-1时,服务端的ISR列表里的所有副本都写入成功,才会给生产者返回成功的响应。而min.insync.replicas这个参数就是控制ISR列表的,假设min.insync.replicas=1,这就意味着ISR列表里可以只有一个副本,这个副本就是leader replica,这个时候即使acks设置的是-1,但其实消息只发送到leader replica,以后就返回成功的响应了。
因为ISR只有一个副本,我们知道这种情况是有可能会丢数据的,所以min.insync.replicas这个值需要大于1的(如果ISR列表里面副本的个数小于min.insync.replicas,生产者发送消息是失败的),并且是min.insync.replicas <= replication.factor

消费者

01 /  手动提交offset
消费者是可以自动提交offset的,但是如果是自动提交offset,可能会丢数据,比如消费者每隔3秒提交一次offset,假如偏移量成功提交了,但是数据处理失败了,这个时候就会丢数据。所以把enable.auto.commit设置成false就行。
当然,我们也只是有限度的保证Kafka数据不丢,因为我们知道Kafka的数据首先是写到操作系统缓存的,假如我们用了上面的配置方案,数据写入成功了,还没落到磁盘,但是集群停电了,这个时候也是会丢数据的!

Kafka 是一种高吞吐量的分布式发布订阅消息系统,它能够解决和处理的问题还有很多。当然了,要想成为一名合格的大数据工程师,还要具备系统的大数据技术知识体系,并熟练使用技术解决不同工作场景中遇到的问题。像Zookeeper、Hadoop、Flume......

“Kafka保证零数据丢失的配置方案”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯