102萬行代碼,1270 個問題,Flink 新版發佈了什麼?(附最佳實踐電子書)

做者:李鈺(絕頂)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 開源社區的蓬勃發展。機器學習

640.png

其中阿里巴巴實時計算團隊共提交 64.5 萬行代碼,超過總代碼量的 60%,作出了突出的貢獻。ide

640.jpeg

在該版本中,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),使得內存配置對用戶更加清晰:

640-3.png

此外,咱們還將 RocksDB state backend 使用的內存歸入了託管範疇,同時能夠經過簡單的配置來指定其能使用的內存上限和讀寫緩存比例(FLINK-7289)。以下圖所示,在實際測試當中受控先後的內存使用差異很是明顯。

640-2.jpeg
<p style="text-align:center">受控前的內存使用狀況(share-slot)</p>
640-3.jpeg

<p style="text-align:center">受控後的內存使用狀況(share-slot)</p>

Batch 兼容 Hive 且生產可用

Flink 從 1.9.0 版本開始支持 Hive 集成,但並未徹底兼容。在 1.10.0 中咱們對 Hive 兼容性作了進一步的加強,使其達到生產可用的標準。具體來講,Flink 1.10.0 中支持:

  • Meta 兼容 - 支持直接讀取 Hive catalog,覆蓋 Hive 1.x/2.x/3.x 所有版本
  • 數據格式兼容 - 支持直接讀取 Hive 表,同時也支持寫成 Hive 表的格式;支持分區表
  • UDF 兼容 - 支持在 Flink SQL 內直接調用 Hive 的 UDF,UDTF 和 UDAF

與此同時,1.10.0 版本中對 batch 執行進行了進一步的優化(FLINK-14133),主要包括:

  • 向量化讀取 ORC (FLINK-14135)
  • 基於比例的彈性內存分配 (FLIP-53)
  • Shuffle 的壓縮 (FLINK-14845)
  • 基於新調度框架的優化 (FLINK-14735)

在此基礎上將 Flink 做爲計算引擎訪問 Hive 的 meta 和數據,在 TPC-DS 10T benchmark 下性能達到 Hive 3.0 的 7 倍以上。

640-4.jpeg

SQL DDL 加強

Flink 1.10.0 支持在 SQL 建表語句中定義 watermark 和計算列,以 watermark 爲例:

CREATE TABLEtable_name (
  WATERMARK FOR columnName AS <watermark_strategy_expression>
) WITH (
  ...
)

渠道文章宣傳內頁.png

除此以外,Flink 1.10.0 還在 SQL 中對臨時函數/永久函數以及系統/目錄函數進行了明確區分,並支持建立目錄函數、臨時函數以及臨時系統函數:

CREATE [TEMPORARY|TEMPORARY SYSTEM] FUNCTION
[IF NOT EXISTS] [catalog_name.][db_name.]function_name
AS identifier [LANGUAGE JAVA|SCALA]

Python UDF 支持

Flink 從 1.9.0 版本開始增長了對 Python 的支持(PyFlink),但用戶只能使用 Java 開發的 User-defined-function (UDF) ,具備必定的侷限性。在 1.10.0 中咱們爲 PyFlink 增長了原生 UDF 支持(FLIP-58),用戶如今能夠在 Table API/SQL 中註冊並使用自定義函數,以下圖所示:

圖片.gif

同時也能夠方便的經過 pip 安裝 PyFlink:

pip install apache-flink

更多詳細介紹,請參考:
https://enjoyment.cool/2020/0...

原生 Kubernetes 集成

Kubernetes (K8S) 是目前最爲流行的容器編排系統,也是目前最流行的容器化應用發佈平臺。在舊版本當中,想要在 K8S 上部署和管理一個 Flink 集羣比較複雜,須要對容器、算子及 kubectl 等 K8S 命令有所瞭解。

在 Flink 1.10 中,咱們推出了對 K8S 環境的原生支持(FLINK-9953),Flink 的資源管理器會主動和 Kubernetes 通訊,按需申請 pod,從而能夠在多租戶環境中以較少的資源開銷啓動 Flink,使用起來也更加的方便。

640-4.png

更多內容,參考 1.10.0 版本發佈日誌:

https://ci.apache.org/project...

結語

2019 年 1 月,阿里巴巴實時計算團隊宣佈 Blink 開源。整整一年以後,Flink 1.10.0 版本的發佈宣告 Flink 和 Blink 的整合正式完成。咱們踐行着本身的諾言,開放源碼,更相信社區的力量,相信社區是開源協做精神與創新的搖籃。咱們也衷心但願有更多的志同道合的小夥伴加入咱們,一塊兒把 Apache Flink 作的愈來愈好!

福利

最後,送上福利:《Apache Flink 年度最佳實踐》電子書免費下載啦!

640-5.jpeg

一次性公佈來自 bilibili、美團點評、小米、快手、OPPO、菜鳥、Lyft、Netflix 等 9 篇深度文章,揭祕一線大廠實時平臺構建實踐。不容錯過的精品電子書,大數據工程師必讀實戰「真經」!點擊下方連接,即刻下載!

免費下載
《Apache Flink 年度最佳實踐》>>>

目錄以下:

  • 僅1年GitHub Star數翻倍,Apache Flink 作了什麼?
  • Lyft基於Apache Flink的大規模準實時數據分析平臺
  • Apache Flink在快手實時多維分析場景的應用
  • Bilibili基於Apache Flink的平臺化探索與實踐
  • 美團點評基於 Apache Flink 的實時數倉平臺實踐
  • 小米流式平臺架構演進與實踐
  • Netflix:Evolving Keystone to an Open Collaborative Real-time ETL Platform
  • OPPO 基於 Apache Flink 的實時數倉實踐
  • 菜鳥供應鏈實時數倉的架構演進及應用場景
相關文章
相關標籤/搜索