Flink相對於spark的優點體現在以下幾個方面。
容錯
Flink 基於兩階段提交實現了精確的一次處理語義。
Spark Streaming 只能做到不丟數據,但是有重複。
反壓
Flink 在數據傳輸過程中使用了分佈式阻塞隊列,一個阻塞隊列中,當隊列滿了以後發送者會被天然阻塞住,這種阻塞功能相當於給這個阻塞隊列提供了反壓的能力。
Spark Streaming 爲了實現反壓這個功能,在原來的架構基礎上構造了一個“速率控制器”,這個“速率控制器”會根據幾個屬性,如任務的結束時間、處理時長、處理消息的條數等計算一個速率。在實現控制數據的接收速率中用到了一個經典的算法,即“PID 算法”。
流和微批
Flink是流處理,用流的思想做批處理。
Spark 是微批處理,用批的思想做流處理。
延時
sparkstreaming是秒級別的
Structured Streaming是毫秒級別的
Flink是亞秒級別的
狀態存儲
spark的狀態管理目前做的比較簡單,只有兩個對應的算子(UpdateStateByKey和mapWithState)
Flink 提供檔案、內存、RocksDB 三種狀態存儲,五種類型的狀態,(ValueState,ListState,ReducingState,AggregatingState,FoldingState,MapState)
靈活的視窗
Spark只能根據處理時間視窗批量處理
Flink可以基於處理時間,數據時間,沒有記錄等的視窗