1.数据处理:
Flink是标准的实时处理引擎,基于事件驱动。支持流批一体。
Spark Streaming是微批次处理的。
2.运行时主要角色包括:
Spark:Master、Worker、Driver、Excutior。(Maser和Worker只有 Standalone模式才有)
Flink:JobManager、TaskManager、Slot。
3.任务调度:
Spark Streaming :连续不断的生成微小的数据批次,构建有向无环图DAG。依次创建DStreamGraph、JobGenerator、JobSeduler。
Flink:Client先根据用户的代码生成StreamGraph,经过优化后生成JobGraph。JobGraph提交给JobManager进行处理,生成ExecutionGraph,ExecutionGraph分发给TaskManager执行。TaskManager执行任务形成物理执行图(框架中没有实际存在物理执行图,是执行起来后的一个概念)。
4.时间机制:
Spark只支持处理时间。
Flink支持注入时间、事件时间、处理时间。同时实现了WarterMark机制可以处理滞后、乱序数据。
5.容错机制
SparkStreaming 的Checkpoint只能保证数据不丢数,但是可能会重复处理。
Flink的Checkpoint基于2PC提交(tow-phase commit),可以实现恰好一次。