(1)設計理念
1、Spark的技術理念是使用微批來模擬流的計算,基於Micro-batch,數據流以時間為單位被切分為一個個批次,通過分布式數據集RDD進行批量處理,是一種偽實時。
2、Flink是基於事件驅動的,是面向流的處理框架, Flink基於每個事件一行一行地流式處理,是真正的流式計算. 另外他也可以基於流來模擬批進行計算實現批處理。
(2)架構方面
1、Spark在運行時的主要角色包括:Master、Worker、Driver、Executor。
2、Flink 在運行時主要包含:Jobmanager、Taskmanager和Slot。
(3)任務調度
1、Spark Streaming 連續不斷的生成微小的數據批次,構建有向無環圖DAG,根據DAG中的action操作形成job,每個job有根據窄寬依賴生成多個stage。
2、Flink 根據用戶提交的代碼生成 StreamGraph,經過優化生成 JobGraph,然后提交給 JobManager進行處理,JobManager 會根據 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 調度最核心的數據結構,JobManager 根據 ExecutionGraph 對 Job 進行調度。
(4)時間機制
1、Spark Streaming 支持的時間機制有限,只支持處理時間。使用processing time模擬event time必然會有誤差, 如果產生數據堆積的話,誤差則更明顯。
2、flink支持三種時間機制:事件時間,注入時間,處理時間,同時支持 watermark 機制處理遲到的數據,說明Flink在處理亂序大實時數據的時候,更有優勢。
(5)容錯機制
1、SparkStreaming的容錯機制是基於RDD的容錯機制,會將經常用的RDD或者對寬依賴加Checkpoint。利用SparkStreaming的direct方式與Kafka可以保證數據輸入源的,處理過程,輸出過程符合exactly once。
2、Flink 則使用兩階段提交協議來保證exactly once。
(6)吞吐量與延遲
1、spark是基於微批的,而且流水線優化做的很好,所以說他的吞入量是最大的,但是付出了延遲的代價,它的延遲是秒級;
2、而Flink是基於事件的,消息逐條處理,而且他的容錯機制很輕量級,所以他能在兼顧高吞吐量的同時又有很低的延遲,它的延遲能夠達到毫秒級;