僅1年GitHub Star數(shù)翻倍,F(xiàn)link 做了什么?
Apache Flink 是公認的新一代開源大數(shù)據(jù)計算引擎,其流水線運行系統(tǒng)既可以執(zhí)行批處理程序也可以執(zhí)行流處理程序。目前,F(xiàn)link 已成為 Apache 基金會和 GitHub 社區(qū)最為活躍的項目之一。在 Flink Forward Asia 2019 上,阿里巴巴資深技術(shù)專家,實時計算負責(zé)人王峰 (莫問)總結(jié)了 2019 年 Flink 在中國的發(fā)展和演進,阿里對 Flink 社區(qū)的貢獻以及未來 Flink 的最新發(fā)展方向。
Flink:最活躍 Apache 項目之一
首先,簡單總結(jié)一下 Flink 社區(qū)的發(fā)展情況。自 2014 年 Flink 貢獻給開源社區(qū)之后,其發(fā)展非常迅速。目前,F(xiàn)link 可以稱之為 Apache 基金會中最為活躍的項目之一,在 GitHub 上其訪問量在 Apache 項目中位居前三。從 Star 數(shù)量上看,僅僅是 2019 年一年的時間,F(xiàn)link 在 GitHub 上的 Star 數(shù)量就翻了一倍,Contributor 數(shù)量也呈現(xiàn)出持續(xù)增長的態(tài)勢。通過相關(guān)數(shù)據(jù)可以看出,越來越多的企業(yè)和開發(fā)者正在不斷地加入 Flink 社區(qū),并為 Flink 的發(fā)展貢獻力量。其中,中國開發(fā)者也做出了巨大的貢獻。
歡迎一起在GitHub上點個Star
Apache Flink 在中國的應(yīng)用
隨著 Flink 社區(qū)的快速發(fā)展,其技術(shù)也逐漸走向成熟。在 2019 年,國內(nèi)已經(jīng)有大量的本土互聯(lián)網(wǎng)公司開始采用 Apache Flink 作為主流的實時計算解決方案。同時,在全球范圍內(nèi),優(yōu)步、網(wǎng)飛、微軟和亞馬遜等國際互聯(lián)網(wǎng)公司也逐漸開始使用 Apache Flink。
Apache Flink 的未來
如今,F(xiàn)link 的主要應(yīng)用場景基本上還是數(shù)據(jù)分析,尤其是實時數(shù)據(jù)分析。Flink 本質(zhì)上是一款流式數(shù)據(jù)處理引擎,覆蓋的場景主要是實時數(shù)據(jù)分析、實時風(fēng)控、實時 ETL 處理等。未來,社區(qū)希望 Flink 演化成為統(tǒng)一的數(shù)據(jù)引擎。
- 在離線數(shù)據(jù)處理方面,希望 Flink 能夠在流數(shù)據(jù)處理的基礎(chǔ)之上進一步實現(xiàn)批與流的統(tǒng)一,提供統(tǒng)一的數(shù)據(jù)處理和分析的解決方案。
- 另一方面,朝著在線數(shù)據(jù)分析處理的方向演進,即利用 Flink 的核心優(yōu)勢、Event-Driven Function 的能力以及 Flink 自帶的狀態(tài)管理等特性實現(xiàn)在線的函數(shù)計算。
近年來,AI 場景發(fā)展得如火如荼并且計算的規(guī)模也越來越大。因此,F(xiàn)link 社區(qū)也希望能夠主動擁抱 AI 場景,在 Flink 機器學(xué)習(xí)方面支持 AI 場景,甚至和 AI 原生的深度學(xué)習(xí)引擎比如 Flink + TensorFlow、Flink + PyTorch 等實現(xiàn)協(xié)同,提供大數(shù)據(jù)+AI 的全鏈路解決方案。
統(tǒng)一的數(shù)據(jù)分析解決方案
下圖為 Apache Flink 批流一體的發(fā)展路線圖。在 1.9 版本之前,F(xiàn)link 的批和流還屬于兩條 Code Path,DataSet 和 DataStream 是兩條獨立的 API,具有兩套不同的運行時環(huán)境,尚未實現(xiàn)批流一體的高度融合。所以在 2019 年發(fā)布的 Flink 1.9 版本和即將發(fā)布的 1.10 版本中,社區(qū)投入了大量精力去做 Flink 批流一體架構(gòu)的整合。經(jīng)過一年的努力,在 Flink 1.10 版本中已經(jīng)實現(xiàn)了 Flink Task 的運行時環(huán)境、執(zhí)行引擎層以及 SQL 和 Table 層面的批和流的高度統(tǒng)一。但是目前而言,F(xiàn)link 在架構(gòu)上還沒有完全實現(xiàn)批流全部統(tǒng)一。未來,社區(qū)希望將 DataSet 和 DataStream 兩套 API 做到批流高度融合。
統(tǒng)一 Flink SQL
SQL 是在大數(shù)據(jù)處理中當(dāng)之無愧的“王道”語言,同時也是最通用、最主流的語言。在 Flink 1.9 版本中發(fā)布了一部分統(tǒng)一的 SQL 功能,而未來在 1.10 版本中也會發(fā)布更多的新功能,比如采用了批流統(tǒng)一的 Query 處理器、支持完整的 DDL 功能。此外,F(xiàn)link 還通過了 TPC-H 和 TPC-DS 的測試集驗證,已達到生產(chǎn)級可用狀態(tài)。Flink 1.10 版本還增強了對于 Python 的支持,目前 Flink SQL 能夠非常方便地使用 Python UDF。除此之外,F(xiàn)link 也積極地擁抱了 Hive 生態(tài),使得 Flink SQL 能夠兼容 Hive,這樣用戶能夠以極低的成本嘗試 Flink 的新技術(shù)。
統(tǒng)一 SQL 架構(gòu)
下面將從技術(shù)層面分享 Flink Unified SQL 的架構(gòu)是如何實現(xiàn)批流的融合,進而實現(xiàn)統(tǒng)一處理的。對于用戶的一條 SQL 而言,無論是批處理還是流處理,可能讀取數(shù)據(jù)的模式是相同的,只不過輸出結(jié)果可能是一次性輸出或者持續(xù)性輸出。在 Flink 中,可以對于用戶輸入的 SQL 采用統(tǒng)一的處理器進行解析、編譯、優(yōu)化等動作,最終產(chǎn)生一個 Flink Job 提交到 Flink 集群中運行。
在查詢處理的過程中,新版本的 Flink 增加了非常多的優(yōu)化技術(shù),比如執(zhí)行計劃策略的優(yōu)化、執(zhí)行算子的優(yōu)化、二進制數(shù)據(jù)結(jié)構(gòu)的優(yōu)化、代碼自動生成的優(yōu)化以及 JVM 的優(yōu)化等,使得 SQL 編譯出來的 Job 執(zhí)行效率更高。在 Runtime 方面,也對 Flink 執(zhí)行引擎做了重構(gòu),對核心底層功能進行抽象,抽象出了可插拔的調(diào)度策略以及 Shuffle Service,這樣一來 Runtime 非常靈活,能夠自由適配流和批的 Job 模式,甚至能夠?qū)崿F(xiàn)同一 Job 中流算子和批算子的自由轉(zhuǎn)換。
Flink 與 Hive 生態(tài)系統(tǒng)集成
讓大家能夠真正將 Flink SQL 用起來,不僅僅需要考慮優(yōu)秀的內(nèi)核技術(shù)或者完善的功能,也需要考慮到用戶的遷移成本。最理想的情況就是讓大家既能夠享受到 Flink SQL 的新技術(shù)成果,同時又不用去修改已有的系統(tǒng)或者數(shù)據(jù)以及元數(shù)據(jù)等。因此,F(xiàn)link SQL 在 2019 年的重大成果之一就是更好地對接了 Hive 生態(tài)。
在 Flink 1.10 版本中,批流一體的 SQL 將直接無縫對接 Hive 的 metastore,可以與 Hive 直接共享元數(shù)據(jù),F(xiàn)link Connector 能夠直接讀取 Hive 的分區(qū)表數(shù)據(jù),并且不會產(chǎn)生任何影響。同時,F(xiàn)link 還兼容 Hive 的 UDF,可以直接運行在 Hive 集群環(huán)境中,不需要定義額外的集群。整體的效果使得用戶僅花費極低的成本就能夠在 Hive SQL 和 Flink SQL 之間非常自由地實現(xiàn)切換。Flink SQL 的另外一個先天優(yōu)勢是可以支持流數(shù)據(jù),也就是同一套業(yè)務(wù)邏輯在處理 Hive 數(shù)據(jù)的同時,也可以對接到 Kafka 等消息隊列來處理實時數(shù)據(jù)。
TPC-DS Benchmark 測試效果
下圖為 Flink 在 TPC-DS 的 Benchmark 測試的性能表現(xiàn)。這里的數(shù)據(jù)集規(guī)模為 10TB,數(shù)據(jù)格式為 Hive ORC,對比版本中,Hive 使用的是 3.0 版本,F(xiàn)link 使用的 1.10 Pre-Release 版本。
結(jié)果表明,F(xiàn)link 不僅能夠跑通 99 個 TPC-DS 的查詢,同時其性能還能夠達到 Hive 的 7 倍。通過 Benchmark 就可以看到 Flink SQL 無論是在功能完善性、性能還是其他各個方面都已經(jīng)達到了業(yè)界的高標(biāo)準(zhǔn),達到了生產(chǎn)級可用。
Flink 擁抱 AI
2019 年,整個技術(shù)圈里最火的當(dāng)屬 AI 了。而 Flink 除了做數(shù)據(jù)處理之外,還希望能夠更好地擁抱 AI 場景。2019 年,F(xiàn)link 在 AI 方面首先鋪墊了機器學(xué)習(xí)基礎(chǔ)設(shè)施,這部分所做的第一件事情就是實現(xiàn)了 Flink ML Lib 的基礎(chǔ) API,稱之為 ML Pipeline。
ML Pipeline 的核心是機器學(xué)習(xí)的流程,其中的核心概念包含 Transformer、Estimator、Model 等。Flink 機器學(xué)習(xí)算法的開發(fā)人員可以使用這套 API 去開發(fā)不同的 Transformer、Estimator、Model,去實現(xiàn)各種經(jīng)典的機器學(xué)習(xí)算法,非常方便。基于 ML Pipeline 這套 API 還能夠自由組合組件來構(gòu)建機器學(xué)習(xí)的訓(xùn)練流程和預(yù)測流程。 對于 AI 算法的開發(fā)人員而言,他們最喜歡的往往并不是 SQL 而是 Python。因此,F(xiàn)link 對于 Python 的支持也尤為重要。在 2019 年,F(xiàn)link 社區(qū)也投入了大量的資源來完善 Flink 的 Python 生態(tài),誕生了 PyFlink 項目。并且在 Flink 1.9 版本中實現(xiàn)了 Python 對于 Table API 的支持。但這是不夠的,在 Flink 1.10 版本中還重點支持了 Python UDF 特性。為了實現(xiàn)這一目標(biāo)一般有兩種技術(shù)選擇,一種是從無到有地實現(xiàn)從 Java 到 Python 的通信,另一種是直接使用成熟的框架。很幸運的是 Beam 社區(qū)在 Python 支持上非常強大,因此 Flink 社區(qū)與 Beam 社區(qū)之間開展了良好的合作,F(xiàn)link 使用了 Beam 的 Python 資源,比如 SDK、Framework 以及數(shù)據(jù)通信格式等。在未來,F(xiàn)link 會進一步完善對于 Python API 和 UDF 的支持,在 ML Pipeline 上更多地支持 Python,同時也希望引入更多成熟的 Python 庫。
Alibaba Alink
眾所周知,阿里巴巴在 2018 年重磅推出了 Blink,也就是阿里內(nèi)部的 Flink 版本。而 Alink 則是阿里巴巴內(nèi)部的基于 Flink 的機器學(xué)習(xí)算法庫,由阿里云機器學(xué)習(xí) PAI 團隊開發(fā)。Alink 是一套分布式、批流一體的機器學(xué)習(xí)算法庫,它既非常好地利用了 Flink 批流一體的計算能力以及在機器學(xué)習(xí)基礎(chǔ)設(shè)施上的一些優(yōu)勢,還結(jié)合了阿里巴巴的業(yè)務(wù)場景。目前,Alink 的上百個機器學(xué)習(xí)算法也正在向 Flink 社區(qū)貢獻,希望能夠成為新一代的 Flink ML。為了盡快讓大家享受到 Alink 的技術(shù)紅利,阿里巴巴也決定同時開源 Alink 項目。
將 Alink 與主流的機器學(xué)習(xí)算法庫進行對比,可以發(fā)現(xiàn)其最大的優(yōu)勢就是不僅能夠支持批式訓(xùn)練的機器學(xué)習(xí)場景,也能夠支持在線的機器學(xué)習(xí)場景。Alink 在離線的機器學(xué)習(xí)場景下與主流的 Spark ML 做了對比,在功能集合上所有算法基本一致,此外還做了性能對比,Alink 和 Spark ML 在離線訓(xùn)練場景下的性能基本在一個水平線上,旗鼓相當(dāng)。但是 Alink 的優(yōu)勢在于一些算法能夠以流式方法進行計算,更好地實現(xiàn)在線機器學(xué)習(xí)。
AI Flow
另外,AI 部分的新項目——AI Flow 也值得關(guān)注。AI Flow 是大數(shù)據(jù)及 AI 的處理流程平臺,在 AI Flow 中定義不同數(shù)據(jù)之間的關(guān)系以及元數(shù)據(jù)格式等就能夠非常方便地搭建一套大數(shù)據(jù)及 AI 處理的流程。整個 Workflow 并不綁定某一引擎或者平臺,但是用戶可以借助 Flink 批流一體的能力去搭建自己的大數(shù)據(jù)及 AI 解決方案。目前,AI Flow 項目正在準(zhǔn)備中,預(yù)計將于明年的第一季度以與 Alink 相同的模式進行開源。
云原生 (Cloud Native)
Flink 與 Kubernetes 生態(tài)系統(tǒng)集成
Flink 1.10 版本將會發(fā)布 Flink 與 Kubernetes 生態(tài)系統(tǒng)的集成功能,使得 Flink 能夠原生地運行在 Kubernetes 管理平臺之上。之所以要將 Flink 放在 Kubernetes 之上,是因為這樣做有以下幾點優(yōu)勢:
- 第一,Kubernetes 能夠在多租戶場景下為 Flink 帶來更好的體驗。
- 第二,目前各大公司都在逐步采用 Kubernetes 做 IT 設(shè)施的管理,如果 Flink 能夠運行在 Kubernetes 之上,對于用戶而言就能夠?qū)崿F(xiàn)更大規(guī)模的資源共享和統(tǒng)一管理,降低成本的同時能夠提高效率。
- 第三,Kubernetes 云原生生態(tài)發(fā)展非常迅速,如果 Flink 能夠與 Kubernetes 生態(tài)實現(xiàn)很好的整合,就能夠讓 Flink 享受到 Kubernetes 生態(tài)的技術(shù)紅利,使得 Flink 能夠在生產(chǎn)環(huán)境下提供運維保障。
阿里巴巴 Blink 貢獻給 Apache Flink 社區(qū)
2019 年 3 月,Blink 正式開源。與此同時,阿里巴巴也希望將 Blink 的能力貢獻回 Flink,共建一套 Flink 社區(qū)。而 Flink 通過 1.9 和即將發(fā)布的 1.10 兩個大版本的迭代基本完成了這項工作。在這 10 個月的工作中,阿里巴巴向 Flink 社區(qū)貢獻了超過一百萬行代碼,將 Blink 中積累的大量架構(gòu)優(yōu)化工作都推回給了 Flink 社區(qū),不僅包括 Runtime、SQL、PyFlink,還包括新的 ML 等。
阿里云實時計算-Ververica Platform on Alibaba Cloud
在將 Blink 逐步貢獻到 Flink 之后,阿里巴巴決定在 2020 年將兩套內(nèi)核逐漸合并為一套內(nèi)核,將 Blink 內(nèi)核合并到 Flink 內(nèi)核中,全面支持開源社區(qū)的發(fā)展。未來,阿里云的產(chǎn)品和內(nèi)部服務(wù)都會基于開源的 Flink 內(nèi)核來實現(xiàn)。此外,阿里巴巴的技術(shù)團隊和 Flink 創(chuàng)始團隊 一起合作,聯(lián)合打造了 Flink 企業(yè)版:Ververica Platform。這套全新的企業(yè)版將會支持阿里巴巴內(nèi)部業(yè)務(wù)和云上業(yè)務(wù)。阿里巴巴也將投入更多力量到開源 Flink 的發(fā)展和社區(qū)的建設(shè)當(dāng)中,也希望和廣大業(yè)界同仁一起助力 Flink 中文社區(qū)的發(fā)展。
