WAL(Write Ahead Logs)是Spark中的一个保障HA(High Available)的机制, 在Hbase中也有应用到

抛开带着很多专业词的场景假设, 我觉得应该把技术上的事情用尽可能简单的逻辑表达清楚, 这样能更好地发现一些本质上的共性和设计思想

我们不如从逻辑上去思考一下, 为什么要有WAL这个机制:

首先, 分布式情况下, 无论是计算还是存储, 设计都应该做好HA, 即假设节点故障是不可避免的, 总是有可能发生的. 毕竟分布式如果节点机器很多的话, 真的是没法假设全部机器都没有问题对吧
假设处理过程中有节点宕机了或是网络出问题了, 也许计算任务可以重新分配给其他节点(如MapReduce的容错机制), 但是数据的完整性和实时性不能共存

具体点说, 以MapReduce为例: MapReduce的数据是静态的数据源, 并不是动态的, 所以就算传输的数据丢失了, 还可以找回来重发, 但MapReduce的场景就是离线处理, 对实时性没有那么高, 发生磁盘IO也问题不大. 相比之下, 在实时处理的场景中, 让一堆数据先落地存储一次, 再发到各个节点, 并不是一个高性能的主意. 但如果不这么做, 数据丢失是不可避免的

虽然Spark有着checkPoint的容错机制, 但checkPoint保存的是任务执行进度, 跟数据的初始接收并没有什么关系啊(数据是要分发到Executor上以Task为单位进行处理的, checkPoint介入的并不是这个数据分发的过程, 而是Task执行的过程)

所以, WAL的设计就显得非常有价值了. 它用较小的log(记录下数据的操作)存储来代替数据存储, 尽可能地兼顾数据的完整性和实时性. 且既然要保证完整性, 那还是要假设存放这个log的机器会宕机. 好吧, 这样一看HDFS是挺好的选择, 而不是随便存放在某个单台机器上

具体WAL是怎么实现的, 以及什么时候触发的, 可以参考一下这篇文章:https://www.jianshu.com/p/5e096df2618d

我截取了一段官网对于WAL机制的一段介绍, 大概是说WAL机制可以预防工作节点宕机, 能保障数据不丢失. 但是WAL机制也不是非常周全的

它有两个短板, 我总结了一下:

  1. 既然要进行WAL, 那肯定有数据落地到文件存储的过程. 虽然log写入的消耗不会很大, 但无论数据多少, 既然都说了是ahead的, 那后面的过程都会等这一步, 一定会影响性能. 而如果把log存放在内存中, 那HA的问题其实还是没有解决, 所以log还是需要落地到具体的磁盘存储上的. 换句话说, 如果可以接受一定的数据丢失, WAL是可以关闭的. HBase的WAL同理, 如果允许数据丢失, 追求很高性能的话, 可以关闭这个机制
  2. 这里只是保证了数据一定会不丢失, 一定会接收到, 也就是"At Least Once"的语义. 但如果重复使用了同一份数据, 那么得到的处理结果就不是准确的. 这种情况一定会有局限性, 还是得尽可能做到精确数据, 也就是要做到"Exactly Once"语义

至于这两个语义是什么意思, 官网也有介绍

下一篇文章将介绍一下Spark Streaming与Kafka如何对接, 以及如何实现这个"Exactly Once"语义

Spark Streaming的WAL机制相关推荐

  1. sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制

    Spark Streaming 反压机制是1.5版本推出的特性,用来解决处理速度比摄入速度慢的情况,简单来讲就是做流量控制.当批处理时间(Batch Processing Time)大于批次间隔(Ba ...

  2. Spark Streaming的工作机制

    1. Spark Streaming的工作机制 Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理. 支持从多种数据源获取数据,包括K ...

  3. Spark Streaming之容错机制以及事务语义

    我们知道RDD本身是一个不可变的,可重新计算的.分布式的数据集.每一个RDD都会记住确定好的操作血缘关系. 如果因为某些原因,导致某个worker节点失败,则导致RDD的某个partition数据丢失 ...

  4. Spark Streaming之checkpoint机制

    一 什么类型的数据需要使用checkpoint? Spark Streaming是最需要进行容错的,因为一般都是7 * 24小时运转,所以需要将足够的信息checkpoint到容错的存储系统上,比如H ...

  5. spark基础之spark streaming的checkpoint机制

    一 什么类型的数据需要使用checkpoint? Spark Streaming是最需要进行容错的,因为一般都是7 * 24小时运转,所以需要将足够的信息checkpoint到容错的存储系统上,比如H ...

  6. Spark Streaming 反压机制

    反压机制的引入 默认情况下,Spark Streaming通过receiver以生产者生产数据的速率接收数据,计算过程中会出现批处理时间(Processing Time)大于批间隔时间(Batch I ...

  7. 35-Spark Streaming反压机制、Spark的数据倾斜的解决和Kylin的简单介绍

    19.6 数据的反压机制⭐️ 反压机制的理解 数据流入的速度远高于数据处理的速度,对流处理系统构成巨大的负载压力,如果不能正确处理,可能导致集群资源耗尽,最终集群崩溃, 因此有效的反压机制(backp ...

  8. Spark Streaming 实战案例(四) Spark Streaming 缓存、Checkpoint机制

    主要内容 Spark Stream 缓存 Checkpoint 案例 1. Spark Stream 缓存 通过前面一系列的课程介绍,我们知道DStream是由一系列的RDD构成的,它同一般的RDD一 ...

  9. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver

    [TOC] 实时WordCount案例 主要是监听网络端口中的数据,并实时进行wc的计算. Java版 测试代码如下: package cn.xpleaf.bigdata.spark.java.str ...

最新文章

  1. idea新建项目写html5,Intellij IDEA搭建vue-cli项目
  2. grunt入门讲解1:grunt的基本概念和使用
  3. EF6 在原有数据库中使用 CodeFirst 总复习(四、新建实体对象)
  4. XPsp3键盘设备链/栈信息_02_VMware
  5. 隐藏式抽屉SlidingDrawer(无法实现垂直)
  6. 铜陵信息化建设和智慧城市发展成果惠及百姓
  7. 网络带宽由什么决定_你的二手奢侈品价格到底由什么决定,奢侈品回收标准是什么...
  8. 应用的生命周期各个程序运行状态时代理的回调
  9. 前端学习(97):psd切图流程
  10. 传奇谢幕,回顾霍金76载传奇人生
  11. (转发)详解汽车UDS诊断协议(二)
  12. MYSQL误删数据恢复
  13. WQM软件使用说明书
  14. 测试工程师入门知识点整理
  15. sum()函数和count()函数的区别
  16. IT工程师读新工具论--从亚里士多德到培根随便扯扯
  17. 上网行为管理设备网关部署方式
  18. 基于 PaddleClas 的 SoccerNet 足球 ReID 基线
  19. 信息学奥赛一本通 1244:和为给定数 | OpenJudge NOI 1.11 07:和为给定数
  20. 菜鸟[1]_链表(C语言)

热门文章

  1. 快速重传与快速恢复算法
  2. idea使用vue项目卡顿问题
  3. 【C语言】C语言实现的无页面扫雷游戏 2.0
  4. 互联网快讯:小红书启动最严医美治理;极米投影产品受消费者肯定;小米手机小爱同学新增上课模式
  5. php接收mq,php的mq客户端获取队列方法改造
  6. Educoder---Java面向对象(第二章)封装、继承和多态
  7. python基础-note-4.14
  8. Intellij IDEA激活服务器
  9. 微信小程序实现基本页面设置
  10. Java中Comparable接口和Comparator接口怎么用?