天天看點

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

作者:李钰(絕頂)

導讀:Apache Flink 是公認的新一代開源大資料計算引擎,可以支援流處理、批處理和機器學習等多種計算形态,也是Apache 軟體基金會和 GitHub 社群最為活躍的項目之一。

2019 年 1 月,阿裡巴巴實時計算團隊宣布将經過雙十一曆練和集團内部業務打磨的 Blink 引擎進行開源并向 Apache Flink 貢獻代碼,此後的一年中,阿裡巴巴實時計算團隊與 Apache Flink 社群密切合作,持續推進 Flink 對 Blink 的整合。

2 月 12 日,Apache Flink 1.10.0 正式釋出,在 Flink 的第一個雙位數版本中正式完成了 Blink 向 Flink 的合并。在此基礎之上,Flink 1.10 版本在生産可用性、功能、性能上都有大幅提升。本文将詳細為大家介紹該版本的重大變更與新增特性。

文末更有 Flink 實踐精選電子書,現已開放免費下載下傳~

下載下傳位址

https://flink.apache.org/downloads.html

Flink 1.10 是迄今為止規模最大的一次版本更新,除标志着 Blink 的合并完成外,還實作了 Flink 作業的整體性能及穩定性的顯著優化、對原生 Kubernetes 的初步內建以及對 Python 支援(PyFlink)的重大優化等。

綜述

Flink 1.10.0 版本一共有 218 名貢獻者,解決了 1270 個 JIRA issue,經由 2661 個 commit 總共送出了超過 102 萬行代碼,多項資料對比之前的幾個版本都有所提升,印證着 Flink 開源社群的蓬勃發展。

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

其中阿裡巴巴實時計算團隊共送出 64.5 萬行代碼,超過總代碼量的 60%,做出了突出的貢獻。

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

在該版本中,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),使得記憶體配置對使用者更加清晰:

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

此外,我們還将 RocksDB state backend 使用的記憶體納入了托管範疇,同時可以通過簡單的配置來指定其能使用的記憶體上限和讀寫緩存比例(FLINK-7289)。如下圖所示,在實際測試當中受控前後的記憶體使用差别非常明顯。

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

受控前的記憶體使用情況(share-slot)

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

受控後的記憶體使用情況(share-slot)

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 倍以上。

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

SQL DDL 增強

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]           

Python UDF 支援

Flink 從 1.9.0 版本開始增加了對 Python 的支援(PyFlink),但使用者隻能使用 Java 開發的 User-defined-function (UDF) ,具有一定的局限性。在 1.10.0 中我們為 PyFlink 增加了原生 UDF 支援(FLIP-58),使用者現在可以在 Table API/SQL 中注冊并使用自定義函數,如下圖所示:

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

同時也可以友善的通過 pip 安裝 PyFlink:

pip install apache-flink           

更多詳細介紹,請參考:

https://enjoyment.cool/2020/02/19/Deep-dive-how-to-support-Python-UDF-in-Apache-Flink-1-10/

原生 Kubernetes 內建

Kubernetes (K8S) 是目前最為流行的容器編排系統,也是目前最流行的容器化應用釋出平台。在舊版本當中,想要在 K8S 上部署和管理一個 Flink 叢集比較複雜,需要對容器、算子及 kubectl 等 K8S 指令有所了解。

在 Flink 1.10 中,我們推出了對 K8S 環境的原生支援(FLINK-9953),Flink 的資料總管會主動和 Kubernetes 通信,按需申請 pod,進而可以在多租戶環境中以較少的資源開銷啟動 Flink,使用起來也更加的友善。

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

更多内容,參考 1.10.0 版本釋出日志:

https://ci.apache.org/projects/flink/flink-docs-stable/release-notes/flink-1.10.html

結語

2019 年 1 月,阿裡巴巴實時計算團隊宣布 Blink 開源。整整一年之後,Flink 1.10.0 版本的釋出宣告 Flink 和 Blink 的整合正式完成。我們踐行着自己的諾言,開放源碼,更相信社群的力量,相信社群是開源協作精神與創新的搖籃。我們也衷心希望有更多的志同道合的小夥伴加入我們,一起把 Apache Flink 做的越來越好!

福利

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

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

一次性公布來自 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 的實時數倉實踐
  • 菜鳥供應鍊實時數倉的架構演進及應用場景