Spark Streaming的原理,计算流程, 容错性和实时性, Spark Streaming中RDD的传承关系, DStream的简介 28

1. Spark Streaming的原理

Spark Streaming是基于Spark的流式批处理引擎, 其原理是把输入数据以某一时间间隔批量的处理, 当批处理间隔缩短到秒级时, 便可以用于处理实时数据流.

2. Spark Streaming的计算流程

  • Spark Streaming是将流式计算分解成一系列短小的批处理作业.
  • 这里的批处理引擎是Spark Core, 也就是把Spark Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream), 每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset).
  • 然后将Spark Streaming中对DStream的Transformation操作变为针对RDD的Transformation操作, 将RDD经过操作变成中间结果保存在内存中.
  • 整个流式计算根据业务的需求,可以对中间的结果进行缓存或者存储到外部设备.
    下图显示了Spark Streaming的整个流程.
    Spark Streaming的原理,计算流程, 容错性和实时性, Spark Streaming中RDD的传承关系, DStream的简介 28

3. Spark Streaming容错性

3.1 对于流式计算来说,容错性至关重要

  • 首先我们要明确一下Spark中RDD的容错机制.每一个RDD都是一个不可变的分布式可重算的数据集, 其记录着确定性的操作继承关系(lineage).
  • 只要输入数据是可容错的,那么任意一个RDD的分区(partition),出错或者不可用,都是可以利用原始输入数据通过转换操作而重新算出的.

3.2 Spark Streaming的RDD传承关系, DStream简介

Spark Streaming的原理,计算流程, 容错性和实时性, Spark Streaming中RDD的传承关系, DStream的简介 28

  • 图中的每一个椭圆表示一个RDD,椭圆中的每个圆形代表一个RDD的一个分区Partition.
  • 图中的每一列的多个RDD表示一个DStream(Discretized Stream)(图中有三个DStream).
  • 每一行最后一个RDD则表示**每一个分段时间(Batch Size)**所产生的中间结果RDD.图中的Batch Size是1秒,
  • 我们可以看到图中的每一个RDD都是通过lineage相连.
  • 由于Spark Streaming输入数据可以来自磁盘(例如hdfs多份拷贝)或者来自于网络的数据流(Spark Streaming会将网络输入数据的每一个数据流拷贝两份到其他的机器)能够保证容错性.
  • 所以RDD中任意的Partition出错, 都可以并行地在其他机器上将缺失的Partition计算出来,这个容错恢复方式比连续计算模型(如Strom)的效率还要高.

4. Spark Streaming的实时性

  • 对于实时性的讨论,会牵涉到流式处理框架的应用场景.
  • Spark Streaming将流式计算分解成多个Spark Job, 对于每一个段数据的处理都会经过Spark DAG图分解以及Spark的任务集的的调度过程.
  • 对于目前版本的Spark Streaming而言, 其最小的Batch Size的选取在0.5~2秒之间(Strom目前最小的延迟是100ms左右).所以Spark Streaming能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时性计算场景.