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可以基於處理時間,數據時間,沒有記錄等的窗口
