天天看點

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

作者|莫問

Flink:最活躍 Apache 項目之一

首先,簡單總結一下 Flink 社群的發展情況。自 2014 年 Flink 貢獻給開源社群之後,其發展非常迅速。目前,Flink 可以稱之為 Apache 基金會中最為活躍的項目之一,在 GitHub 上其通路量在 Apache 項目中位居前三。從 Star 數量上看,僅僅是 2019 年一年的時間,Flink 在 GitHub 上的 Star 數量就翻了一倍,Contributor 數量也呈現出持續增長的态勢。通過相關資料可以看出,越來越多的企業和開發者正在不斷地加入 Flink 社群,并為 Flink 的發展貢獻力量。其中,中國開發者也做出了巨大的貢獻。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

歡迎一起在GitHub上點個Star

Apache Flink 在中國的應用

随着 Flink 社群的快速發展,其技術也逐漸走向成熟。在 2019 年,國内已經有大量的本土網際網路公司開始采用 Apache Flink 作為主流的實時計算解決方案。同時,在全球範圍内,優步、網飛、微軟和亞馬遜等國際網際網路公司也逐漸開始使用 Apache Flink。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

Apache Flink 的未來

如今,Flink 的主要應用場景基本上還是資料分析,尤其是實時資料分析。Flink 本質上是一款流式資料處理引擎,覆寫的場景主要是實時資料分析、實時風控、實時 ETL 處理等。未來,社群希望 Flink 演化成為統一的資料引擎。

在離線資料處理方面,希望 Flink 能夠在流資料處理的基礎之上進一步實作批與流的統一,提供統一的資料處理和分析的解決方案。

另一方面,朝着線上資料分析處理的方向演進,即利用 Flink 的核心優勢、Event-Driven Function 的能力以及 Flink 自帶的狀态管理等特性實作線上的函數計算。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache 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 做到批流高度融合。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

統一 Flink SQL

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 的新技術。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

統一 SQL 架構

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

下面将從技術層面分享 Flink Unified SQL 的架構是如何實作批流的融合,進而實作統一處理的。對于使用者的一條 SQL 而言,無論是批處理還是流處理,可能讀取資料的模式是相同的,隻不過輸出結果可能是一次性輸出或者持續性輸出。在 Flink 中,可以對于使用者輸入的 SQL 采用統一的處理器進行解析、編譯、優化等動作,最終産生一個 Flink Job 送出到 Flink 叢集中運作。

在查詢處理的過程中,新版本的 Flink 增加了非常多的優化技術,比如執行計劃政策的優化、執行算子的優化、二進制資料結構的優化、代碼自動生成的優化以及 JVM 的優化等,使得 SQL 編譯出來的 Job 執行效率更高。在 Runtime 方面,也對 Flink 執行引擎做了重構,對核心底層功能進行抽象,抽象出了可插拔的排程政策以及 Shuffle Service,這樣一來 Runtime 非常靈活,能夠自由适配流和批的 Job 模式,甚至能夠實作同一 Job 中流算子和批算子的自由轉換。

Flink 與 Hive 生态系統內建

讓大家能夠真正将 Flink SQL 用起來,不僅僅需要考慮優秀的核心技術或者完善的功能,也需要考慮到使用者的遷移成本。最理想的情況就是讓大家既能夠享受到 Flink SQL 的新技術成果,同時又不用去修改已有的系統或者資料以及中繼資料等。是以,Flink SQL 在 2019 年的重大成果之一就是更好地對接了 Hive 生态。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

在 Flink 1.10 版本中,批流一體的 SQL 将直接無縫對接 Hive 的 metastore,可以與 Hive 直接共享中繼資料,Flink Connector 能夠直接讀取 Hive 的分區表資料,并且不會産生任何影響。同時,Flink 還相容 Hive 的 UDF,可以直接運作在 Hive 叢集環境中,不需要定義額外的叢集。整體的效果使得使用者僅花費極低的成本就能夠在 Hive SQL 和 Flink SQL 之間非常自由地實作切換。Flink SQL 的另外一個先天優勢是可以支援流資料,也就是同一套業務邏輯在處理 Hive 資料的同時,也可以對接到 Kafka 等消息隊列來處理實時資料。

TPC-DS Benchmark 測試效果

下圖為 Flink 在 TPC-DS 的 Benchmark 測試的性能表現。這裡的資料集規模為 10TB,資料格式為 Hive ORC,對比版本中,Hive 使用的是 3.0 版本,Flink 使用的 1.10 Pre-Release 版本。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

結果表明,Flink 不僅能夠跑通 99 個 TPC-DS 的查詢,同時其性能還能夠達到 Hive 的 7 倍。通過 Benchmark 就可以看到 Flink SQL 無論是在功能完善性、性能還是其他各個方面都已經達到了業界的高标準,達到了生産級可用。

Flink 擁抱 AI

2019 年,整個技術圈裡最火的當屬 AI 了。而 Flink 除了做資料處理之外,還希望能夠更好地擁抱 AI 場景。2019 年,Flink 在 AI 方面首先鋪墊了機器學習基礎設施,這部分所做的第一件事情就是實作了 Flink ML Lib 的基礎 API,稱之為 ML Pipeline。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

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 庫。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

Alibaba Alink

衆所周知,阿裡巴巴在 2018 年重磅推出了 Blink,也就是阿裡内部的 Flink 版本。而 Alink 則是阿裡巴巴内部的基于 Flink 的機器學習算法庫,由阿裡雲機器學習 PAI 團隊開發。Alink 是一套分布式、批流一體的機器學習算法庫,它既非常好地利用了 Flink 批流一體的計算能力以及在機器學習基礎設施上的一些優勢,還結合了阿裡巴巴的業務場景。目前,Alink 的上百個機器學習算法也正在向 Flink 社群貢獻,希望能夠成為新一代的 Flink ML。為了盡快讓大家享受到 Alink 的技術紅利,阿裡巴巴也決定同時開源 Alink 項目。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

将 Alink 與主流的機器學習算法庫進行對比,可以發現其最大的優勢就是不僅能夠支援批式訓練的機器學習場景,也能夠支援線上的機器學習場景。Alink 在離線的機器學習場景下與主流的 Spark ML 做了對比,在功能集合上所有算法基本一緻,此外還做了性能對比,Alink 和 Spark ML 在離線訓練場景下的性能基本在一個水準線上,旗鼓相當。但是 Alink 的優勢在于一些算法能夠以流式方法進行計算,更好地實作線上機器學習。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

AI Flow

另外,AI 部分的新項目——AI Flow 也值得關注。AI Flow 是大資料及 AI 的處理流程平台,在 AI Flow 中定義不同資料之間的關系以及中繼資料格式等就能夠非常友善地搭建一套大資料及 AI 處理的流程。整個 Workflow 并不綁定某一引擎或者平台,但是使用者可以借助 Flink 批流一體的能力去搭建自己的大資料及 AI 解決方案。目前,AI Flow 項目正在準備中,預計将于明年的第一季度以與 Alink 相同的模式進行開源。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

雲原生 (Cloud Native)

Flink 與 Kubernetes 生态系統內建

Flink 1.10 版本将會釋出 Flink 與 Kubernetes 生态系統的內建功能,使得 Flink 能夠原生地運作在 Kubernetes 管理平台之上。之是以要将 Flink 放在 Kubernetes 之上,是因為這樣做有以下幾點優勢:

第一,Kubernetes 能夠在多租戶場景下為 Flink 帶來更好的體驗。

第二,目前各大公司都在逐漸采用 Kubernetes 做 IT 設施的管理,如果 Flink 能夠運作在 Kubernetes 之上,對于使用者而言就能夠實作更大規模的資源共享和統一管理,降低成本的同時能夠提高效率。

第三,Kubernetes 雲原生生态發展非常迅速,如果 Flink 能夠與 Kubernetes 生态實作很好的整合,就能夠讓 Flink 享受到 Kubernetes 生态的技術紅利,使得 Flink 能夠在生産環境下提供運維保障。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

阿裡巴巴 Blink 貢獻給 Apache Flink 社群

2019 年 3 月,Blink 正式開源。與此同時,阿裡巴巴也希望将 Blink 的能力貢獻回 Flink,共建一套 Flink 社群。而 Flink 通過 1.9 和即将釋出的 1.10 兩個大版本的疊代基本完成了這項工作。在這 10 個月的工作中,阿裡巴巴向 Flink 社群貢獻了超過一百萬行代碼,将 Blink 中積累的大量架構優化工作都推回給了 Flink 社群,不僅包括 Runtime、SQL、PyFlink,還包括新的 ML 等。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群

阿裡雲實時計算-Ververica Platform on Alibaba Cloud

在将 Blink 逐漸貢獻到 Flink 之後,阿裡巴巴決定在 2020 年将兩套核心逐漸合并為一套核心,将 Blink 核心合并到 Flink 核心中,全面支援開源社群的發展。未來,阿裡雲的産品和内部服務都會基于開源的 Flink 核心來實作。此外,阿裡巴巴的技術團隊和 Flink 創始團隊 一起合作,聯合打造了 Flink 企業版:Ververica Platform。這套全新的企業版将會支援阿裡巴巴内部業務和雲上業務。阿裡巴巴也将投入更多力量到開源 Flink 的發展和社群的建設當中,也希望和廣大業界同仁一起助力 Flink 中文社群的發展。

僅1年GitHub Star數翻倍,Flink 做了什麼?Flink:最活躍 Apache 項目之一統一的資料分析解決方案Flink 擁抱 AI雲原生 (Cloud Native)阿裡巴巴 Blink 貢獻給 Apache Flink 社群