一 前言
最近在看 Structured Streaming,先出个简单对比图,Spark Streaming VS Structured Streaming 以及 Structured Streaming内部的两种模式 MicroBatch Streaming VS Continous Streaming。后期深入再做总结和补充。
参考:
《图解Spark核心技术与案例实战》
二 Spark Streaming VS Structured Streaming
对比项 |
Spark Streaming |
Structured Streaming |
基于RDD抽象数据 |
DStream(RDD不同时间点的集合,是RDD抽象数据集合)。DStream上有转换和输出操作 |
基于DataSet/DataFrame,由于二维表有数据类型,可以做优化,如encoder。它提供了toRDD接口,最终也是基于RDD的Job |
是否数据结构化 |
可以非结构化??? |
结构化数据 |
Job执行流程 |
先执行DStreamGraphe+JobScheduler再执行DAGSchedule。 作业先注册到DStreamGraph,到达批处理时间时,才根据DStreamGraph生成作业并处理该批处理时间内接受的数据 |
先执行SQL Engine再执行DAGSchedule。 SQL Engine(解析SQL语句,生成logical plan,优化logical plan,生成physical plan,优化physical plan) |
是否批处理 |
是,设置BatchDuration,每个duration的数据流为一批处理源 |
MicroBatchExecution:是批处理 ContinousExecution:可以单条数据增量式处理(这个目前由触发器的时间决定) |
最小延期 |
0.5~2s |
MicroBatchExecution:100ms ContinousExecution:1ms |
处理引擎 |
Spark Streaming引擎(DStreamGraphe+JobScheduler)+SparkCore引擎(DAGScheduler) |
Spark SQL引擎(SQL Engine) + SparkCore引擎(DAGScheduler) |
三、 MicroBatch Streaming VS Continous Streaming (In Spark2.4 Structured Streaming)
Structured Streaming处理模式 |
MicroBatch模式 |
Continous 模式 |
统一的用户编程模式 |
Input => Query => Result => Output(complete/update/append) -----------------------trigger---------------------------> |
|
统一的设计模式(from code view) |
source => transformation/action(catalyst->spark.execute) => sink => output => [checkpoint] |
|
样例代码及对应的代码模块 |
||
Trigger类 |
Trigger.ProcessingTime |
Trigger.Continuous |
对应execution |
MicroBatchExecution |
ContinuousExecution |
Trigger工作模式 |
以一定间隔(interval)调度计算逻辑,间隔为0时,上批次调用完成后,立即进入下一批次调用一直调用,退化为类似sparkstreaming的micro batch的流处理 |
以一定间隔(interval)查看流计算状态 |
DAG调度次数 |
等于Trigger 的 interval间隔触发次数 |
一次,由ContinuousWriteRDD.compute里 while (!context.isInterrupted() && !context.isCompleted()) 完成 |
目前Spark2.3-2.4支持API |
支持API丰富,如汇聚,关联等操作 |
仅简单的projection类(map,select等) |
TriggerExecutor类型 |
ProcessingTimeExecutor |
ProcessingTimeExecutor/ OneTimeExecutor |
Databrick测试的延迟级别 |
100ms |
1ms |
Refer to: https://databricks.com/blog/2018/03/20/low-latency-continuous-processing-mode-in-structured-streaming-in-apache-spark-2-3-0.html |
||