实时计算引擎——Spark-Streaming

Spark streaming简介

spark streaming是spark体系中的一个流式处理框架。因此,Spark streaming相对于其他流式处理框架就更有优势,用途更加广泛,它能够与spark sql、机器学习以及图像处理框架无缝连接。spark streaming还能够从多种数据源获得数据,同时,能够输出到多种不同的数据平台中,包括文件系统、数据库和实时数据展示平台dashboards。spark streaming的流处理框架如下图1所示:

实时计算引擎——Spark-Streaming

详细的处理流程如下图2所示,spark streaming接收实时数据流输入的数据流后,再将其划分为一个个batch(小批次数据流)供后续Spark engine处理,所以实际上,Spark Streaming是按一个个batch(小批次)来处理数据流的。

实时计算引擎——Spark-Streaming

spark streaming工作原理

spark streaming的大致工作流程如下:

首先,需要一个DAG的静态模板来定义batch内的执行逻辑。

其次,如上图2所示,针对实时的数据流来说, 还需要有控制器,不间断地将数据流分成多个batch,同时在每个batch内部应用DAG静态模板执行处理逻辑。

再次,要生成DStream,并不能像一般的数据源那样从存储介质中去读取,而是要从多种数据推送过来的数据,包括kafka、flume以及twitter等等。

最后,由于流式处理要不断地循环执行,保障任务的稳定性就显得尤其重要了。

因此,针对上述四种需要,spark streaming的整体执行流程就是围绕上述四个需求而设置的,其总体工作流程如下图所示。如图中脚注,橙色部分显示DAG的静态定义部分,淡蓝色为控制器部分,负责流的拆分,同时执行橙色部分定义的静态模板。绿色部分显示了driver和executor的数据接收部分,最后的紫色部分,显示了spark streaming中很重要的稳定性保障功能,即checkpoint。

实时计算引擎——Spark-Streaming

Spark-Streaming 程序监控

官网中指出,spark中专门为SparkStreaming程序的监控设置了额外的途径,当使用StreamingContext时,在WEB UI中会出现一个"Streaming"的选项卡,

实时计算引擎——Spark-Streaming

在此选项卡内,统计的内容展示如下:

实时计算引擎——Spark-Streaming

这其中包括接受的记录数量,每一个batch内处理的记录数,处理时间,以及总共消耗的时间。

在上述参数之中最重要的两个参数分别是Porcessing Time 以及 Scheduling Delay

Porcessing Time 用来统计每个batch内处理数据所消费的时间

Scheduling Delay 用来统计在等待被处理所消费的时间

如果PT比SD大,或者SD持续上升,这就表明此系统不能对产生的数据实时响应,换句话来说就是,出现了处理时延,每个batch time 内的处理速度小于数据的产生速度。

在这种情况下,读者需要想法减少数据的处理速度,即需要提升处理效率。


分享到:


相關文章: