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的整个流程.
3. Spark Streaming容错性
3.1 对于流式计算来说,容错性至关重要
- 首先我们要明确一下Spark中RDD的容错机制.每一个RDD都是一个不可变的分布式可重算的数据集, 其记录着确定性的操作继承关系(lineage).
- 只要输入数据是可容错的,那么任意一个RDD的分区(partition),出错或者不可用,都是可以利用原始输入数据通过转换操作而重新算出的.
3.2 Spark Streaming的RDD传承关系, DStream简介
- 图中的每一个椭圆表示一个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能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时性计算场景.