Kafka如何保证数据不丢失

1.生产者数据的不丢失
kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1,-1。

如果是同步模式:ack机制能够保证数据的不丢失,如果ack设置为0,风险很大,一般不建议设置为0。即使设置为1,也会随着leader宕机丢失数据。

producer.type=sync
request.required.acks=1

如果是异步模式:也会考虑ack的状态,除此之外,异步模式下的有个buffer,通过buffer来进行控制数据的发送,有两个值来进行控制,时间阈值与消息的数量阈值,如果buffer满了数据还没有发送出去,有个选项是配置是否立即清空buffer。可以设置为-1,永久阻塞,也就数据不再生产。
异步模式下,即使设置为-1。也可能因为程序员的不科学操作,操作数据丢失,比如kill -9,但这是特别的例外情况。

producer.type=async
request.required.acks=1
queue.buffering.max.ms=5000
queue.buffering.max.messages=10000
queue.enqueue.timeout.ms = -1
batch.num.messages=200

结论:producer有丢数据的可能,但是可以通过配置保证消息的不丢失。

2.消费者数据的不丢失
通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。

而offset的信息在kafka0.8版本之前保存在zookeeper中,在0.8版本之后保存到topic中,即使消费者在运行过程中挂掉了,再次启动的时候会找到offset的值,找到之前消费消息的位置,接着消费,由于offset的信息写入的时候并不是每条消息消费完成后都写入的,所以这种情况有可能会造成重复消费,但是不会丢失消息。

唯一例外的情况是,我们在程序中给原本做不同功能的两个consumer组设置KafkaSpoutConfig.bulider.setGroupid的时候设置成了一样的groupid,这种情况会导致这两个组共享同一份数据,就会产生组A消费partition1,partition2中的消息,组B消费partition3的消息,这样每个组消费的消息都会丢失,都是不完整的。  为了保证每个组都独享一份消息数据,groupid一定不要重复才行。

2.kafka集群中的broker的数据不丢失
每个broker中的partition我们一般都会设置有replication(副本)的个数,生产者写入的时候首先根据分发策略(有partition按partition,有key按key,都没有轮询)写入到leader中,follower(副本)再跟leader同步数据,这样有了备份,也可以保证消息数据的不丢失。

Kafka 数据丢失问题相关推荐

  1. Kafka 数据丢失与优化

    目录 Kafka数据丢失与解决方案 Kafka在什么情况下会丢失数据? broker发生丢失数据分为下面几类 consumer发生丢失数据分为下面几类 Kafka性能调优 producer需注意 br ...

  2. kafka数据丢失总结

    数据丢失是一件非常严重的事情事,针对数据丢失的问题我们需要有明确的思路来确定问题所在,针对这段时间的总结,我个人面对kafka 数据丢失问题的解决思路如下: 是否真正的存在数据丢失问题,比如有很多时候 ...

  3. 记一次kafka数据丢失问题的排查

    2019独角兽企业重金招聘Python工程师标准>>> 数据丢失为大事,针对数据丢失的问题我们排查结果如下. 第一:是否存在数据丢失的问题?     存在,且已重现. 第二:是在什么 ...

  4. 关于kafka数据丢失场景的一次激烈讨论.... |文末送书

    大家好,我是彦祖~ 问题描述 最近彦祖发现,有不少同学 对 acks 和 min.insync.replicas 的配置存在不少误解. 刚好拿一个同学的问题,来好好说明一下 根据上面提的几个问题, 整 ...

  5. kafka数据丢失的场景

    消费者弄丢数据 唯一可能导致消费者弄丢数据的情况,就是说,你那个消费到了这个消息,然后消费者那边自动提交了offset,让kafka以为你已经消费好了这个消息,其实你刚准备处理这个消息,你还没处理,你 ...

  6. kafka面试题简答

    1. kafka分区数如何设置? 默认情况下 1 指定分区,按你指定的分区 2 未指定分区,但是指定了key,依据key的hashCode计算分区 3 未指定分区,且没有指定key,依据轮询算法计算分 ...

  7. Kafka: 异常知其所以然

    1. kafka Producer内存不足 生产者客户端由两个线程协调运行:主线程和Sender线程(发送线程): 主线程由KafkaProducer创建消息,通过拦截器序列化器跟分区器之后缓存到消息 ...

  8. 大数据面试之kafka重点(二)

    Kafka怎么保证数据不丢失,不重复? 可回答:Kafka如何保证生产者不丢失数据,消费者不丢失数据? 问过的一些公司:字节跳动 x 2,快手x2,严选阿里,祖龙娱乐x2,招银网络,ebay,安恒信息 ...

  9. 炫“库”行动-人大金仓有奖征文-KFS目标端支持Kafka配置详解

    [本文正在参与炫"库"行动-人大金仓有奖征文] 活动链接:  https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91e ...

  10. 手记系列之六 ----- 分享个人使用kafka经验

    前言 本篇文章主要介绍的关于本人从刚工作到现在使用kafka的经验,内容非常多,包含了kafka的常用命令,在生产环境中遇到的一些场景处理,kafka的一些web工具推荐等等.由于kafka这块的记录 ...

最新文章

  1. java 二维码生成和解析
  2. 简单的成绩录入系统程序及分析以及思考
  3. c++调用python3
  4. conrtex 和 ARM 的关系
  5. Matlab中断语句
  6. 清华大学《操作系统》(八):置换算法
  7. appium+python 【Mac】Android夜神模拟器
  8. 【Matlab语音识别】声纹识别系统(带面板)【含GUI源码 1022期】
  9. 软件平台与中间技术复习
  10. The JAVA_HOME environment variable is not defined correctly(亲测有效)
  11. web前端开发工程师的真实能力如何判定?大厂资深前端指点迷津
  12. python三阶魔方_三阶魔方自动求解及动态可视化matlab代码
  13. 谈谈对儒家与道家的一些小小看法
  14. 应届生职场入门毒打指南
  15. 教学案例六 多重循环
  16. SQL39 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,使用强制索引。
  17. 开源ios街机模拟器
  18. 【软件工程——UML基础教程】
  19. 乐檬/乐看TV4.5多源完美修复版以及AS打包教程
  20. 不用向日葵 teamview 利用云服务器部署FRP穿透内网实现控制远程桌面

热门文章

  1. 虚拟桌面和云桌面办公系统
  2. CC2540F256RHAR
  3. 安卓音频开发(四)使用lame把wav转mp3
  4. 是男人就闯到99关 【安卓软件】
  5. 打造国云安全品牌,铸牢企业云上安全防线
  6. 关于weight decay
  7. html页面调用高德地图,html前端使用高德地图入门教程
  8. SAP入行须知 | SAP项目管理(PS模块)概述 |大连易拓SAP
  9. 软件工程——团队作业2
  10. octobercms mysql_OctoberCMS插件形成数据库关系(OctoberCMS plugin form database relationships)...