目录

Kafka数据丢失与解决方案

Kafka在什么情况下会丢失数据?

broker发生丢失数据分为下面几类

consumer发生丢失数据分为下面几类

Kafka性能调优

producer需注意

broker需注意

consumer需注意

Kafka中常见的server配置文件可参考:


Kafka数据丢失与解决方案

Kafka在什么情况下会丢失数据?

首先Kafka是三层模型,即producer、broker、consumer三层,在一般业务场景下,丢失数据主要发生在broker、consumer层。

broker发生丢失数据分为下面几类

1、假设此时网络负载很高或者IO非常繁忙导致写入失败,且未设置消息重试发送机制并且没有做限速处理,导致超出了网络带宽限速,这个时候数据就会丢失,相应的解决方案就是:Kakfa一定要配置消息的重试机制,并且重试的时间间隔要稍微长一点;

2、假设在一段时间处理过程中有数据落盘了,但是这个时候磁盘坏掉了,那么这批数据固然就丢失了(特殊情况);

3、因Kafka是批量消息处理,所以如果在处理过程中数据的长度超过限制,会直接抛出异常MessageSizeTooLargeException异常,从而这批数据中的部分数据很可能会丢失,相应的解决方案:正常情况下在Kafka上流转的消息,设置不大于100MB;

4、每一个topic都有多个分区partition,每一个分区都有一个leader和多个副本follower,假设在leader与follower同步的过程中,leader所在机器宕机了,而部分数据还未同步结束,这个时候就会造成数据的丢失,解决方案是:上述丢失数据发生在一个副本机制,但是多个副本机制情况下会降低数据丢失的概率;

consumer发生丢失数据分为下面几类

1、当你设置了auto.commit.enable=true的时候,即自动提交,consumer已经拉取了一批数据正在处理过程中,但是根据你配置的commit interval触发了提交操作,这个时候consumer就停止了处理,这个时候还没有处理完就已经commit了数据,那没有处理的数据就会丢失,相应解决方案:结合自己的业务场景合理使用每批拉取的数据量,以及设置正确的commit interval;

Kafka性能调优

主要还是从producer,broker,consumer三个层次上进行优化。

producer需注意

1、采用异步推送数据的方式,权衡安全性和速度型的于要求,定位问题的时候,可以采用同步方式来查找问题;

2、推送消息的时候尽量保证不要让内存的缓冲池太满,通俗点讲就是如果数据写入过快,Kafka的落盘速度太慢,这个时候肯定会造成数据丢失;

3、合理设置每次发送数据batch的大小,以减少网络IO和磁盘IO的请求,这是提高效率的关键点;

4、Kafka是消息队列,更加适合处理小数据,所以在大量的数据在push的时候,应该启用消息压缩,但是同时带来 cpu压力过高,根据业务场景进行择取;

broker需注意

1、Kafka的分区机制和多副本机制为Kafka带来并发和数据安全保证,所以在建立topic的时候尽量保证建立多个分区(太少不能满足需求,太多占用存储资源),并且保证:

a.每个分区有多个副本,这是保证数据高可用的一点;

b.每个分区尽量保证在不同的服务器上,不然多个进程会对同一个磁盘文件进行IO操作,是的操作系统的磁盘调度太频繁,破坏磁盘读写的顺序性,这和Kafka设计的理念不同;

2、Kafka内部数据缓冲机制是flush机制,它是将数据先集中收集起来后放到缓冲区,随后进行批量flush磁盘,所以在这部分上需要控制log.flush.interval.messages和log.flush.interval.ms来协同工作,以减少磁盘IO,比如log.flush.interval.ms=1000;

3、网络和IO操作线程配置优化:即num.network.threads=xxx 和 num.io.threads=xxx,建议配置,num.network.threads=cpu核数+1   num.io.threads=cpu核数*2;

4、日志保留策略:Kafka提供数据可选保留时长,但是也不可以保留过长的时间,因为数据量一大后堆积服务器后,服务器压力会倍增,默认保留7天;

5、purgatory设置,broker在接收数据后会选择立即处理request请求或者延迟处理,而延迟处理的这部分数据会被放到purgatory中,目前purgatory机制有bug,因为在request是否被正确处理后,它的状态都是complete,但是当处理状态完成后,并没有将该请求从purgatory中移除,而是继续占用资源,因此内存会因堆积过多导致OOM,所以需要设置两个参数,fetch.purgatory.purge.interval.requests=1000 和 producer.purgatory.purge.interval.requests=1000 ;

consumer需注意

1、可以关闭自动提交功能,手动提交并手动更新offset;

2、结合自己的业务场景设置每次拉取的数据大小,以及每次拉取数据的超时时间;

Kafka中常见的server配置文件可参考:

https://blog.csdn.net/lizhitao/article/details/25667831

Kafka 数据丢失与优化相关推荐

  1. kafka常见问题及优化

    kafka常见问题及优化 一.消息丢失: 二.消息重复发送和重复消费 三.消息乱序 四.消息积压 五.消息回溯 六.延时队列 七.kafka事务 八.kafka高性能原因 一.消息丢失: 发送端: a ...

  2. kafka数据丢失总结

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

  3. 面试官问:上亿数据量下,Kafka是如何优化JVM GC问题的?

    大家都知道Kafka是一个高吞吐的消息队列,是大数据场景首选的消息队列,这种场景就意味着发送单位时间消息的量会特别的大,那既然如此巨大的数据量,kafka是如何支撑起如此庞大的数据量的分发的呢? 今天 ...

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

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

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

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

  6. kafka java jvm 优化_kafka优化–JVM参数配置优化

    主要是启动脚本和log4j基本参数的设置和优化,这些参数藏的比较深. 1.JVM参数配置优化 如果使用的CMS GC算法,建议JVM Heap不要太大,在4GB以内就可以.JVM太大,导致Major ...

  7. kafka数据丢失的场景

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

  8. Kafka常见痛点及优化方案

    文章目录 1.集群木桶效应,broker雪崩 2.集群扩容无法自动负载均衡 3.集群副本迁移影响集群稳定,迁移任务不可控 4.异常流量打挂集群 5.一个业务异常影响整个集群稳定 6.pagecache ...

  9. 闫燕飞:Kafka的高性能揭秘及优化

    大家下午好,我是来自腾讯云基础架构部ckafka团队的高级工程师闫燕飞.今天在这里首先为大家先分享一下开源Kafka在高性能上面的一些关键点,然后我会分享一下我们腾讯云ckafka对社区Kafka所做 ...

最新文章

  1. linux基础试卷笔试,顽石系列:Linux基础笔试
  2. surging 微服务引擎 2.0 会有多少惊喜?
  3. mybatis crud_MyBatis教程– CRUD操作和映射关系–第2部分
  4. python整数逆序输出_利用Python实现倒序任意整数
  5. java学习之单件模式
  6. 云起智慧中心连接华为_云起荣获CIBIS十大全屋智能品牌奖:将与合作伙伴共同扩展AIoT生态平台...
  7. 三菱Q系列ST、结构化编程、QD77定位以及转矩模式切换案例 三菱PLC程序案例
  8. PDF reference 1.0-1.7 下载(免费)以及PDF结构介绍
  9. 利用第三方软件识别图片文字并转换为文本
  10. [渝粤题库]西北工业大学自动控制理论
  11. mdx词典包_欧路词典—使用体验
  12. IT如何解决中国民营企业十大挑战
  13. JAVA百分比排序方法实现
  14. WOW副本任务制作方法
  15. 为什么游戏偏爱D3D
  16. Zabbix Meetup上海站回顾+ppt下载
  17. EasyUI Treegrid 树形网格(官网没有提到的实现方式)
  18. 定义留存收益科目(Define Retained Earning Account)
  19. 关于运行本地web页面浏览器出现安全拦截提示问题
  20. shell 编程 for 循环详解及应用实例

热门文章

  1. NoSQL之 Redis配置与优化
  2. Android 图片文字识别DEMO(基于百度OCR)
  3. 滴滴云「于某声」在「服务器采购过程中」受贿累计超过 1000 万元:已移交公安机关
  4. 【JSD2209-DAY05】for、while、数组(上)
  5. 如何用服务器内存做系统盘,服务器内存扩容怎么做
  6. 《中国人工智能系列白皮书——智能驾驶》精编
  7. IGBT的驱动和过流保护电路的研究
  8. DELL H61刷BIOS开启AHCI
  9. DDoS防御的8种方针详解
  10. ddos攻击怎么防?防御ddos的几种方法