spark实时计算中会存在数据丢失和数据重复计算的场景,

在receiver收到数据且通过driver的调度executor开始计算数据的时候如果driver突然崩溃,则此时executor就会被杀掉,executor中的数据就会丢失,为了防止executor中的数据丢失,此时要通过WAL的方式让所有的数据通过例如hdfs的方式进行安全性容错处理,executor重启之后可以通过WAL进行恢复。这么做也会存在弊端,WAL会极大损伤spark steaming的receiver接收数据的性能,因为WAL也要容错性处理。第二个kafka本身是有副本的,receiver接收的时候也做了容错的副本,相当于容错了2次,造成资源的浪费。

receiver收到数据之后,进行了容错性处理,但是还没有来得及提交offset,此时receiver崩溃了,重启后通过管理kafka中元数据再次重启读取数据,但是此时spark认为读取成功了,kafka认为没有成功(offset没有提交),此时就会再读一次,而之前失败的数据因为spark.task.maxFallures的值,如果大于1,会再次重试计算,如果计算成功了,就会计算2次,造成重复计算.

direct的方式是从kafka消费完数据之后直接封装成partition的数据提供给作业使用,而receiver是将消费到数据按照blockInterval切分成block,保存到blockManager中,在使用时会根据blockId获取该数据。

另外direct的方式rdd的partition与topic的partition是一一对应的,如果某个topic只有一个partition就不好了。而receiver的partition是根据blockInterval切分出来的,blockInterval的默认值是200ms

最新文章

  1. 进击的Python【第三章】:Python基础(三)
  2. 分析DH加密算法,一种适基于密钥一致协议的加密算法。
  3. elastichq auto connect
  4. java调用Oracle分页存储过程
  5. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q94-Q96)
  6. 简单实现Tab切换(带框架)
  7. JSTL(fn函数)
  8. 【http】生命周期和http管道技术 整理中
  9. 标签static
  10. 来自GitHub的Android UI开源项目
  11. POJ3104 Drying(二分查找)
  12. hadoop 学习
  13. hdu3652(数位dp)
  14. React-Native安装使用
  15. Java经典设计模式之五大创建型模式(附实例和详解)
  16. asp.net core 自定义认证方式--请求头认证
  17. ceph:如何处理rados --striper上传失败的对象
  18. Java NIO中的缓冲区Buffer(一)缓冲区基础
  19. Linux 目录结构学习与简析 Part1
  20. Windows编程的本质

热门文章

  1. Queue API的几种实现详解
  2. 做个开源博客学习Vite2 + Vue3 (一)搭建项目
  3. Day17_102_IO_BufferedReader
  4. Day14_79_IO+Properties联合应用
  5. [Abp vNext 源码分析] - 18. 单元测试
  6. Ubuntu20.04安装MongoDB
  7. python正则表达式基本语法
  8. PHP实现网站访客来访显示访客IP&浏览器&操作系统
  9. MySQL查询日志介绍
  10. hdu4450 不错的贪心