Spark Streaming是构建在Spark上的实时流计算框架,可以进行实时流数据处理。Spark是一个类似于MapReduce的分布式计算框架,其核心是弹性分布式数据集,可以在快速在内存中对数据集进行多次迭代,以支持复杂的数据挖掘算法和图形计算算法。而Spark Streaming则扩展了Spark处理大规模流式数据的能力。
Spark Streaming能运行在100+的结点上,并达到秒级延迟。它使用基于内存的Spark作为执行引擎,具有高效和容错的特性。还能集成Spark的批处理和交互查询,为实现复杂的算法提供和批处理类似的简单接口。
Spark Streaming使用“微批次”的架构,把流式计算当作一系列连续的小规模批处理来对待。它从各种输入源中读取数据,并把数据分组为小的批次,新的批次按均匀的时间间隔创建出来。在每个时间区间开始的时候,一个新的批次就创建出来,在该区间内收到的数据都会被添加到这个批次中,在时间区间结束时,批次停止增长。时间区间的大小是由批次间隔这个参数决定的,批次间隔一般设在500毫秒到几秒之间,由应用开发者配置。每个输入批次都形成一个RDD,以Spark作业的方式处理并生成其他的RDD,处理的结果可以以批处理的方式传给外部系统。
从原理上看,把传统的spark批处理程序变成streaming程序,spark需要构建四个内容:一个静态的RDD DAG的模板,来表示处理逻辑;一个动态的工作控制器,将连续的streaming data切分数据片段,并按照模板复制出新的RDD DAG的实例,对数据片段进行处理;Receiver进行原始数据的产生和导入;Receiver将接收到的数据合并为数据块并存到内存或硬盘中,供后续batch RDD进行消费;以及对长时运行任务的保障,包括输入数据的失效后的重构,处理任务的失败后的重调。