1. kafka Producer内存不足

生产者客户端由两个线程协调运行:主线程和Sender线程(发送线程);

主线程由KafkaProducer创建消息,通过拦截器序列化器跟分区器之后缓存到消息累加器(RecordAccumulator),然后通过Sender线程批量发送。这个缓存大小由生产者客户端buffer.memory配置,默认值为32MB,一次发送的间隔时间由max.block.ms配置,此参数的默认值为60000ms,即60s。

在上述两个配置均为默认配置的时候,如果发送端的消息每分钟大小超过32MB,这个时候KafkaProducer的send()方法要么被阻塞,要么抛出异常。

2. kafka数据丢失的几种可能

1)生产者没有指定重试次数(默认的重试次数是0),发生了一些可重试的Exception

常见的可重试Exception包括:

  • NetworkException: 表示网络异常,有可能是瞬时的网络故障,重试可以恢复;

  • LeaderNotAvaliableException: leader副本不可用,有可能老的leader副本下线,新的leader副本正在选举,也是重试可恢复的。

  • UnknownTopicOrPartitionException: 虽然topic和分区是会自动创建的,创建分区不是一个瞬时的操作,这个过程是需要一定时间的,在此期间内发送的Record有可能会抛出此异常,该异常同样可以通过retry解决。

  • NotEnoughReplicasException: 因为min.insync.replicas>可用的replica数,这个异常也可以重试,直到Replica Map中有可用的副本接受消息并返回。

  • NotCoordinatorException: 收到的事务ID与协调器不一致的时候会抛出此异常。

  • TimeoutException:Request timeout的时候会抛出此异常,参数是request.timeout.ms,注意这个参数需要比服务器端的request.timeout.ms要大,这样可以减少因为重试造成的消息重复。

Producer端的重试参数

prop.put(ProducerConfig.RETRIES_CONFIG, 10); //重试10次
prop.put(ProducerConfig.RETRY_BACKOFF_MS_CONFIG, Duration.ofMinutes(3).toMillis()); //3min重试一次,默认为60s

2) acks配置不正确

acks是用来指定kafka中必须有多少个副本收到这条消息,生产者才会认为这条消息成功写入,它涉及到权衡吞吐性跟可靠性,一般来说acks的值越大,可靠性越大,但是吞吐性能会随之降低.(因为acks中可选all,所以该参数配置的时候用字符串类型)

  • acks = 1(默认):

生产者发送消息之后,只要分区的leader副本成功写入消息,那么它就会收到来自服务端的成功响应。如果消息无法写入leader副本,比如在leader 副本崩溃、重新选举新的leader 副本的过程中,那么生产者就会收到一个错误的响应,如果没有重试机制,在写入下一个leaader副本时失败了就会缺数据.(前面回复ack的leader副本在后面一次选举中没有当选leader)

  • acks=0

我发我的,不管你收没收到,因为没法得知服务器的响应,如果在写入过程中出现了什么异常,消息就丢失了.

  • acks=-1 或 acks=all

这个是最强可靠性的保证,所有replica收到ack才算写入成功.

Kafka: 异常知其所以然相关推荐

  1. flink sql 知其所以然(二)| 自定义 redis 数据维表(附源码)

    感谢您的关注  +  点赞 + 再看,对博主的肯定,会督促博主持续的输出更多的优质实战内容!!! 1.序篇-本文结构 背景篇-为啥需要 redis 维表 目标篇-做 redis 维表的预期效果是什么 ...

  2. flink sql 知其所以然(八):flink sql tumble window 的奇妙解析之路

    感谢您的小爱心(关注  +  点赞 + 再看),对博主的肯定,会督促博主持续的输出更多的优质实战内容!!! 1.序篇-本文结构 大数据羊说 用数据提升美好事物发生的概率~ 34篇原创内容 公众号 源码 ...

  3. flink sql 知其所以然(十三):流 join 很难嘛?(下)

    看了那么多的技术文,你能明白作者想让你在读完文章后学到什么吗? 大数据羊说__的文章会让你明白 大数据羊说 用数据提升美好事物发生的概率~ 43篇原创内容 公众号 博主会阐明博主期望本文能给小伙伴们带 ...

  4. flink sql 知其所以然(十五):改了改源码,实现了个 batch lookup join(附源码)

    看了那么多的技术文,你能明白作者想让你在读完文章后学到什么吗? 大数据羊说__的文章会让你明白 大数据羊说 用数据提升美好事物发生的概率~ 44篇原创内容 公众号 博主会阐明博主期望本文能给小伙伴们带 ...

  5. 好久没有看到这么有建设性德文章,由衷地赞叹《知其所以然地学习(以算法学习为例)》-By 刘未鹏(pongba)

    知其所以然地学习(以算法学习为例) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) Updated(2008-7-24):更新见正文部分,有标注 ...

  6. 《零基础看得懂的C++入门教程 》——(1)第一个C++程序就让你知其所以然

    一.学习目标 了解第一个C++程序 了解第一个C++程序结构 了解什么是注释 了解什么是命名空间 了解C语言的输出(如何在程序运行时显示内容) 了解语句结束后需要使用什么符号表示结束 了解程序入口 目 ...

  7. 感想篇:7)知其然与知其所以然,KnowHow与KnowWhy

    本章目的:探究--知其然与知其所以然,KnowHow与KnowWhy. 1.Know-How体系与代价: 100多年的汽车研发历史表明,企业只有开发过两代车以上才能逐步建立和完善Know-How体系. ...

  8. 知其然也知其所以然,Redis笔记总结:核心原理与应用实践

    所谓「授人以鱼不如授人以渔」这份笔记的初衷和目标就是帮助后端开发者较为深入的理解Redis背后的原理和实践经验,做到知其然也知其所以然,为未来进阶成长为架构师做好准备. 笔记内容介绍 : Redis基 ...

  9. No.2第一章 启航 | Flink 知其然,知其所以然

    |文末 点击[在看]留言 反馈 | Flink知其然部分共有三个章节,其中 第一章 启航 部分会 从Flink的应用场景切入,让大家清楚的判断自己的业务场景是否适合使用Flink,同时介绍Flink的 ...

最新文章

  1. 工信部明确公共互联网网络安全突发事件分级预警、应急
  2. python【蓝桥杯vip练习题库】ADV-298 和谐宿舍2(DP)
  3. ARC 没有自动释放内存
  4. Linux--vim的使用
  5. Ext.form 表单为什么第二次就不正常显示
  6. 关于纯HTML格式写入word
  7. 【英语学习】【医学】Unit 08 The Cardiovascular System
  8. MyCat分布式数据库集群架构工作笔记0022---高可用_单表存储千万级_海量存储_分表扩展分片枚举
  9. Configure VNC in RHEL 7
  10. 数据结构 顺序表的建立+折半查找(二分查找)
  11. 开通CSDN年度会员,免费赠送代码
  12. linux qt触摸屏配置,QT触摸屏的实现
  13. Lower power design UPF 学习
  14. 【案例分享】网络环路检测基本功能配置
  15. Android 头像定位图标
  16. python -m http.server 搭建一个简易web下载服务器(可用于快速发送大文件)
  17. ffmpeg生成hls点播
  18. HPUX 11iV3 LVM新变化
  19. CUDA C++ Programming Guide——编程模型
  20. 驼峰命名法等命名规范

热门文章

  1. C# 设计模式-工场方法模式
  2. ftp上传错误,提示:打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹。
  3. 甘肃省白银市谷歌卫星地图下载
  4. 计算机组成原理(微课版) -- 第三章 -- 运算方法与运算器
  5. 年轻人,如何才能抗造之 - 预期管理及心态控制
  6. 北航991——软件工程过程
  7. 2020C#程序设计及应用教程复习总结
  8. 神舟凯旋,四海欢颜!“神舟十二号”背后的Smartbi力量
  9. 2021年广东省高新技术企业认定时间安排汇总大全
  10. 简单的条件概率乘积推导证明:p(c|a,b)p(b|a)=p(b,c|a)