Apache Flink 是公認的新一代開源大數據計算引擎,其流水線運行系統既能夠執行批處理程序也能夠執行流處理程序。目前,Flink 已成爲 Apache 基金會和 GitHub 社區最爲活躍的項目之一。在 Flink Forward Asia 2019 上,阿里巴巴資深技術專家,實時計算負責人王峯 (莫問)總結了 2019 年 Flink 在中國的發展和演進,阿里對 Flink 社區的貢獻以及將來 Flink 的最新發展方向。git
GitHub 地址: https://github.com/apache/flink歡迎一塊兒GitHub點Star~github
首先,簡單總結一下 Flink 社區的發展狀況。自 2014 年 Flink 貢獻給開源社區以後,其發展很是迅速。目前,Flink 能夠稱之爲 Apache 基金會中最爲活躍的項目之一,在 GitHub 上其訪問量在 Apache 項目中位居前三。從 Star 數量上看,僅僅是 2019 年一年的時間,Flink 在 GitHub 上的 Star 數量就翻了一倍,Contributor 數量也呈現出持續增加的態勢。經過相關數據能夠看出,愈來愈多的企業和開發者正在不斷地加入 Flink 社區,併爲 Flink 的發展貢獻力量。其中,中國開發者也作出了巨大的貢獻。算法
隨着 Flink 社區的快速發展,其技術也逐漸走向成熟。在 2019 年,國內已經有大量的本土互聯網公司開始採用 Apache Flink 做爲主流的實時計算解決方案。同時,在全球範圍內,優步、網飛、微軟和亞馬遜等國際互聯網公司也逐漸開始使用 Apache Flink。apache
現在,Flink 的主要應用場景基本上仍是數據分析,尤爲是實時數據分析。Flink 本質上是一款流式數據處理引擎,覆蓋的場景主要是實時數據分析、實時風控、實時 ETL 處理等。將來,社區但願 Flink 演化成爲統一的數據引擎。數據結構
近年來,AI 場景發展得如火如荼而且計算的規模也愈來愈大。所以,Flink 社區也但願可以主動擁抱 AI 場景,在 Flink 機器學習方面支持 AI 場景,甚至和 AI 原生的深度學習引擎好比 Flink + TensorFlow、Flink + PyTorch 等實現協同,提供大數據+AI 的全鏈路解決方案。架構
下圖爲 Apache Flink 批流一體的發展路線圖。在 1.9 版本以前,Flink 的批和流還屬於兩條 Code Path,DataSet 和 DataStream 是兩條獨立的 API,具備兩套不一樣的運行時環境,還沒有實現批流一體的高度融合。因此在 2019 年發佈的 Flink 1.9 版本和即將發佈的 1.10 版本中,社區投入了大量精力去作 Flink 批流一體架構的整合。通過一年的努力,在 Flink 1.10 版本中已經實現了 Flink Task 的運行時環境、執行引擎層以及 SQL 和 Table 層面的批和流的高度統一。可是目前而言,Flink 在架構上尚未徹底實現批流所有統一。將來,社區但願將 DataSet 和 DataStream 兩套 API 作到批流高度融合。框架
SQL 是在大數據處理中當之無愧的「王道」語言,同時也是最通用、最主流的語言。在 Flink 1.9 版本中發佈了一部分統一的 SQL 功能,而將來在 1.10 版本中也會發布更多的新功能,好比採用了批流統一的 Query 處理器、支持完整的 DDL 功能。此外,Flink 還經過了 TPC-H 和 TPC-DS 的測試集驗證,已達到生產級可用狀態。Flink 1.10 版本還加強了對於 Python 的支持,目前 Flink SQL 可以很是方便地使用 Python UDF。除此以外,Flink 也積極地擁抱了 Hive 生態,使得 Flink SQL 可以兼容 Hive,這樣用戶可以以極低的成本嘗試 Flink 的新技術。運維
下面將從技術層面分享 Flink Unified SQL 的架構是如何實現批流的融合,進而實現統一處理的。對於用戶的一條 SQL 而言,不管是批處理仍是流處理,可能讀取數據的模式是相同的,只不過輸出結果多是一次性輸出或者持續性輸出。在 Flink 中,能夠對於用戶輸入的 SQL 採用統一的處理器進行解析、編譯、優化等動做,最終產生一個 Flink Job 提交到 Flink 集羣中運行。機器學習
在查詢處理的過程當中,新版本的 Flink 增長了很是多的優化技術,好比執行計劃策略的優化、執行算子的優化、二進制數據結構的優化、代碼自動生成的優化以及 JVM 的優化等,使得 SQL 編譯出來的 Job 執行效率更高。在 Runtime 方面,也對 Flink 執行引擎作了重構,對核心底層功能進行抽象,抽象出了可插拔的調度策略以及 Shuffle Service,這樣一來 Runtime 很是靈活,可以自由適配流和批的 Job 模式,甚至可以實現同一 Job 中流算子和批算子的自由轉換。分佈式
讓你們可以真正將 Flink SQL 用起來,不只僅須要考慮優秀的內核技術或者完善的功能,也須要考慮到用戶的遷移成本。最理想的狀況就是讓你們既可以享受到 Flink SQL 的新技術成果,同時又不用去修改已有的系統或者數據以及元數據等。所以,Flink SQL 在 2019 年的重大成果之一就是更好地對接了 Hive 生態。
在 Flink 1.10 版本中,批流一體的 SQL 將直接無縫對接 Hive 的 metastore,能夠與 Hive 直接共享元數據,Flink Connector 可以直接讀取 Hive 的分區表數據,而且不會產生任何影響。同時,Flink 還兼容 Hive 的 UDF,能夠直接運行在 Hive 集羣環境中,不須要定義額外的集羣。總體的效果使得用戶僅花費極低的成本就可以在 Hive SQL 和 Flink SQL 之間很是自由地實現切換。Flink SQL 的另一個先天優點是能夠支持流數據,也就是同一套業務邏輯在處理 Hive 數據的同時,也能夠對接到 Kafka 等消息隊列來處理實時數據。
下圖爲 Flink 在 TPC-DS 的 Benchmark 測試的性能表現。這裏的數據集規模爲 10TB,數據格式爲 Hive ORC,對比版本中,Hive 使用的是 3.0 版本,Flink 使用的 1.10 Pre-Release 版本。
結果代表,Flink 不只可以跑通 99 個 TPC-DS 的查詢,同時其性能還可以達到 Hive 的 7 倍。經過 Benchmark 就能夠看到 Flink SQL 不管是在功能完善性、性能仍是其餘各個方面都已經達到了業界的高標準,達到了生產級可用。
2019 年,整個技術圈裏最火的當屬 AI 了。而 Flink 除了作數據處理以外,還但願可以更好地擁抱 AI 場景。2019 年,Flink 在 AI 方面首先鋪墊了機器學習基礎設施,這部分所作的第一件事情就是實現了 Flink ML Lib 的基礎 API,稱之爲 ML Pipeline。
ML Pipeline 的核心是機器學習的流程,其中的核心概念包含 Transformer、Estimator、Model 等。Flink 機器學習算法的開發人員可使用這套 API 去開發不一樣的 Transformer、Estimator、Model,去實現各類經典的機器學習算法,很是方便。基於 ML Pipeline 這套 API 還可以自由組合組件來構建機器學習的訓練流程和預測流程。
對於 AI 算法的開發人員而言,他們最喜歡的每每並非 SQL 而是 Python。所以,Flink 對於 Python 的支持也尤其重要。在 2019 年,Flink 社區也投入了大量的資源來完善 Flink 的 Python 生態,誕生了 PyFlink 項目。而且在 Flink 1.9 版本中實現了 Python 對於 Table API 的支持。但這是不夠的,在 Flink 1.10 版本中還重點支持了 Python UDF 特性。爲了實現這一目標通常有兩種技術選擇,一種是從無到有地實現從 Java 到 Python 的通訊,另外一種是直接使用成熟的框架。很幸運的是 Beam 社區在 Python 支持上很是強大,所以 Flink 社區與 Beam 社區之間開展了良好的合做,Flink 使用了 Beam 的 Python 資源,好比 SDK、Framework 以及數據通訊格式等。在將來,Flink 會進一步完善對於 Python API 和 UDF 的支持,在 ML Pipeline 上更多地支持 Python,同時也但願引入更多成熟的 Python 庫。
衆所周知,阿里巴巴在 2018 年重磅推出了 Blink,也就是阿里內部的 Flink 版本。而 Alink 則是阿里巴巴內部的基於 Flink 的機器學習算法庫,由阿里雲機器學習 PAI 團隊開發。Alink 是一套分佈式、批流一體的機器學習算法庫,它既很是好地利用了 Flink 批流一體的計算能力以及在機器學習基礎設施上的一些優點,還結合了阿里巴巴的業務場景。目前,Alink 的上百個機器學習算法也正在向 Flink 社區貢獻,但願可以成爲新一代的 Flink ML。爲了儘快讓你們享受到 Alink 的技術紅利,阿里巴巴也決定同時開源 Alink 項目。
將 Alink 與主流的機器學習算法庫進行對比,能夠發現其最大的優點就是不只可以支持批式訓練的機器學習場景,也可以支持在線的機器學習場景。Alink 在離線的機器學習場景下與主流的 Spark ML 作了對比,在功能集合上全部算法基本一致,此外還作了性能對比,Alink 和 Spark ML 在離線訓練場景下的性能基本在一個水平線上,旗鼓至關。可是 Alink 的優點在於一些算法可以以流式方法進行計算,更好地實如今線機器學習。
另外,AI 部分的新項目——AI Flow 也值得關注。AI Flow 是大數據及 AI 的處理流程平臺,在 AI Flow 中定義不一樣數據之間的關係以及元數據格式等就可以很是方便地搭建一套大數據及 AI 處理的流程。整個 Workflow 並不綁定某一引擎或者平臺,可是用戶能夠藉助 Flink 批流一體的能力去搭建本身的大數據及 AI 解決方案。目前,AI Flow 項目正在準備中,預計將於明年的第一季度以與 Alink 相同的模式進行開源。
Flink 1.10 版本將會發布 Flink 與 Kubernetes 生態系統的集成功能,使得 Flink 可以原生地運行在 Kubernetes 管理平臺之上。之因此要將 Flink 放在 Kubernetes 之上,是由於這樣作有如下幾點優點:
2019 年 3 月,Blink 正式開源。與此同時,阿里巴巴也但願將 Blink 的能力貢獻回 Flink,共建一套 Flink 社區。而 Flink 經過 1.9 和即將發佈的 1.10 兩個大版本的迭代基本完成了這項工做。在這 10 個月的工做中,阿里巴巴向 Flink 社區貢獻了超過一百萬行代碼,將 Blink 中積累的大量架構優化工做都推回給了 Flink 社區,不只包括 Runtime、SQL、PyFlink,還包括新的 ML 等。
在將 Blink 逐步貢獻到 Flink 以後,阿里巴巴決定在 2020 年將兩套內核逐漸合併爲一套內核,將 Blink 內核合併到 Flink 內核中,全面支持開源社區的發展。將來,阿里雲的產品和內部服務都會基於開源的 Flink 內核來實現。此外,阿里巴巴的技術團隊和 Flink 創始團隊 一塊兒合做,聯合打造了 Flink 企業版:Ververica Platform。這套全新的企業版將會支持阿里巴巴內部業務和雲上業務。阿里巴巴也將投入更多力量到開源 Flink 的發展和社區的建設當中,也但願和廣大業界同仁一塊兒助力 Flink 中文社區的發展。
福利來了
2019 Flink Forward Asia 大會 37+ 演講 PDF 合輯,不容錯過!
Flink Forward Asia 2019 在北京舉行,2000 人次的開發者參與。咱們收錄了 5 大專場,38 篇大咖演講資料的 FFA 2019 資料合輯,精彩內容一次性打包給你!
本文做者:王峯(莫問)
本文爲阿里雲內容,未經容許不得轉載。