1. Runtime
- 引入了可插拔的Shuffle策略。
- 自定義調度器,開發者根據計算模型自身的特點定製不同調度器。
- Blink可以更加靈活地將算子chain在一起,避免不必要的數據傳輸。
- 引入全新的JM FailOver機制,JM 發生錯誤之後,新的 JM 會重新接管整個 JOB 而不是重啓 JOB,從而大大減少了 JM FailOver 對 JOB 的影響。
2. SQL/TableAPI
- 提出了全新的 Query Processor(QP):它包括了一個優化層(Query Optimizer)和一個算子層(Query Executor)。這樣一來,流計算和批計算的在這兩層大部分的設計工作就能做到儘可能地複用。
- SQL 和 TableAPI 的程序最終執行的時候將不會翻譯到 DataStream 和 DataSet 這兩個 API 上,而是直接構建到可運行的 DAG 上來,這樣就使得物理執行算子的設計不完全依賴底層的 API,有了更大的靈活度,同時執行代碼也能夠被靈活的 codegen 出來。
- Blink 引入了二進制的數據結構 BinaryRow,極大的減少了數據存儲上的開銷以及數據在序列化和反序列化上計算的開銷。
- 引入CodeGen 技術。
- Blink 加入了 miniBatch 的執行模式:使流計算減少了很多IO。
- 批計算方面,首先 Blink batch SQL 能夠完整地跑通 TPC-H 和 TPC-DS,且性能上較Spark有3-5倍的提升。
3. Hive兼容性
- 在元數據(meta data)和數據層將 Flink 和 Hive 對接和打通。這樣子可以直接用 Flink SQL 去查詢 Hive 的數據,真正能夠做到在 Hive 引擎和 Flink 引擎之間的自由切換。
4. Zeppelin for Flink
- 提供更好的可視化和交互式體驗。
5. Flink Web
- 在資源使用方面,新增了 Cluster、TaskManager 與 Job 三個級別的資源信息,使得資源的申請與使用情況一目瞭然。
- 作業的拓撲關係及數據流向可以追溯至 Operator 級別,Vertex 增加了 InQueue,OutQueue 等多項指標,可以方便的追蹤數據的反壓、過濾及傾斜情況。
- TaskManager 和 JobManager 的日誌功能得到大幅度加強,從 Job、Vertex、SubTask 等多個維度都可以關聯至對應日誌,提供多日誌文件訪問入口,以及分頁展示查詢和日誌高亮功能。
- 我們使用了較新的 Angular 7.0 對 Flink web 進行了全面重構,頁面運行性能有了一倍以上的提升。
參考: