做者:李鈺(絕頂)html
導讀:Apache Flink 是公認的新一代開源大數據計算引擎,能夠支持流處理、批處理和機器學習等多種計算形態,也是Apache 軟件基金會和 GitHub 社區最爲活躍的項目之一。2019 年 1 月,阿里巴巴實時計算團隊宣佈將通過雙十一歷練和集團內部業務打磨的 Blink 引擎進行開源並向 Apache Flink 貢獻代碼,此後的一年中,阿里巴巴實時計算團隊與 Apache Flink 社區密切合做,持續推動 Flink 對 Blink 的整合。 express
2 月 12 日,Apache Flink 1.10.0 正式發佈,在 Flink 的第一個雙位數版本中正式完成了 Blink 向 Flink 的合併。在此基礎之上,Flink 1.10 版本在生產可用性、功能、性能上都有大幅提高。本文將詳細爲你們介紹該版本的重大變動與新增特性。apache
文末更有 Flink 實踐精選電子書,現已開放免費下載~ 緩存
<p style="text-align:center">下載地址</p> <p style="text-align:center">https://flink.apache.org/down...</p>架構
Flink 1.10 是迄今爲止規模最大的一次版本升級,除標誌着 Blink 的合併完成外,還實現了 Flink 做業的總體性能及穩定性的顯著優化、對原生 Kubernetes 的初步集成以及對 Python 支持(PyFlink)的重大優化等。框架
Flink 1.10.0 版本一共有 218 名貢獻者,解決了 1270 個 JIRA issue,經由 2661 個 commit 總共提交了超過 102 萬行代碼,多項數據對比以前的幾個版本都有所提高,印證着 Flink 開源社區的蓬勃發展。機器學習
其中阿里巴巴實時計算團隊共提交 64.5 萬行代碼,超過總代碼量的 60%,作出了突出的貢獻。ide
在該版本中,Flink 對 SQL 的 DDL 進行了加強,並實現了生產級別的 Batch 支持和 Hive 兼容,其中 TPC-DS 10T 的性能更是達到了 Hive 3.0 的 7 倍之多。在內核方面,對內存管理進行了優化。在生態方面,增長了 Python UDF 和原生 Kubernetes 集成的支持。後續章節將在這些方面分別進行詳細介紹。函數
在舊版本的 Flink 中,流處理和批處理的內存配置是割裂的,而且當流式做業配置使用 RocksDB 存儲狀態數據時,很難限制其內存使用,從而在容器環境下常常出現內存超用被殺的狀況。性能
在 1.10.0 中,咱們對 Task Executor 的內存模型,尤爲是受管理內存(Managed Memory)進行了大幅度的改進(FLIP-49),使得內存配置對用戶更加清晰:
此外,咱們還將 RocksDB state backend 使用的內存歸入了託管範疇,同時能夠經過簡單的配置來指定其能使用的內存上限和讀寫緩存比例(FLINK-7289)。以下圖所示,在實際測試當中受控先後的內存使用差異很是明顯。
<p style="text-align:center">受控前的內存使用狀況(share-slot)</p>
<p style="text-align:center">受控後的內存使用狀況(share-slot)</p>
Flink 從 1.9.0 版本開始支持 Hive 集成,但並未徹底兼容。在 1.10.0 中咱們對 Hive 兼容性作了進一步的加強,使其達到生產可用的標準。具體來講,Flink 1.10.0 中支持:
與此同時,1.10.0 版本中對 batch 執行進行了進一步的優化(FLINK-14133),主要包括:
在此基礎上將 Flink 做爲計算引擎訪問 Hive 的 meta 和數據,在 TPC-DS 10T benchmark 下性能達到 Hive 3.0 的 7 倍以上。
Flink 1.10.0 支持在 SQL 建表語句中定義 watermark 和計算列,以 watermark 爲例:
CREATE TABLEtable_name ( WATERMARK FOR columnName AS <watermark_strategy_expression> ) WITH ( ... )
除此以外,Flink 1.10.0 還在 SQL 中對臨時函數/永久函數以及系統/目錄函數進行了明確區分,並支持建立目錄函數、臨時函數以及臨時系統函數:
CREATE [TEMPORARY|TEMPORARY SYSTEM] FUNCTION [IF NOT EXISTS] [catalog_name.][db_name.]function_name AS identifier [LANGUAGE JAVA|SCALA]
Flink 從 1.9.0 版本開始增長了對 Python 的支持(PyFlink),但用戶只能使用 Java 開發的 User-defined-function (UDF) ,具備必定的侷限性。在 1.10.0 中咱們爲 PyFlink 增長了原生 UDF 支持(FLIP-58),用戶如今能夠在 Table API/SQL 中註冊並使用自定義函數,以下圖所示:
同時也能夠方便的經過 pip 安裝 PyFlink:
pip install apache-flink
更多詳細介紹,請參考:
https://enjoyment.cool/2020/0...
Kubernetes (K8S) 是目前最爲流行的容器編排系統,也是目前最流行的容器化應用發佈平臺。在舊版本當中,想要在 K8S 上部署和管理一個 Flink 集羣比較複雜,須要對容器、算子及 kubectl 等 K8S 命令有所瞭解。
在 Flink 1.10 中,咱們推出了對 K8S 環境的原生支持(FLINK-9953),Flink 的資源管理器會主動和 Kubernetes 通訊,按需申請 pod,從而能夠在多租戶環境中以較少的資源開銷啓動 Flink,使用起來也更加的方便。
更多內容,參考 1.10.0 版本發佈日誌:
https://ci.apache.org/project...
2019 年 1 月,阿里巴巴實時計算團隊宣佈 Blink 開源。整整一年以後,Flink 1.10.0 版本的發佈宣告 Flink 和 Blink 的整合正式完成。咱們踐行着本身的諾言,開放源碼,更相信社區的力量,相信社區是開源協做精神與創新的搖籃。咱們也衷心但願有更多的志同道合的小夥伴加入咱們,一塊兒把 Apache Flink 作的愈來愈好!
最後,送上福利:《Apache Flink 年度最佳實踐》電子書免費下載啦!
一次性公佈來自 bilibili、美團點評、小米、快手、OPPO、菜鳥、Lyft、Netflix 等 9 篇深度文章,揭祕一線大廠實時平臺構建實踐。不容錯過的精品電子書,大數據工程師必讀實戰「真經」!點擊下方連接,即刻下載!
目錄以下: