蝉联 Apache 最活跃项目,Flink 社区是如何保持高速发展的?
本文由 Apache Flink 中文社區(qū)發(fā)起人,阿里云計(jì)算平臺(tái)事業(yè)部實(shí)時(shí)計(jì)算與開(kāi)放平臺(tái)部門負(fù)責(zé)人王峰分享,主要介紹 Flink 作為一款統(tǒng)一的流批一體引擎其發(fā)展現(xiàn)狀及未來(lái)規(guī)劃。大綱如下:
2020:Apache Flink 社區(qū)生態(tài)加速繁榮的一年
1.Flink 蟬聯(lián) Apache 社區(qū)最活躍項(xiàng)目
我們先來(lái)介紹一下在 2020 年 Flink 社區(qū)生態(tài)發(fā)展的態(tài)勢(shì)。整體來(lái)說(shuō),社區(qū)處在一個(gè)非常健康和高速的發(fā)展過(guò)程中,尤其是在 2020 年,我們?nèi)〉昧朔浅:玫某晒?Apache 軟件基金會(huì) 2020 財(cái)年的報(bào)告中,可以看到一些很關(guān)鍵的數(shù)據(jù):
- Flink 用戶和開(kāi)發(fā)者郵件列表活躍度 Top1
- Github 上 Flink 代碼提交次數(shù) Top2
- Github 上 Flink 的用戶訪問(wèn)量 Top2
綜合這幾個(gè)數(shù)據(jù)來(lái)看,可以認(rèn)為 Flink 在 Apache 眾多的開(kāi)源項(xiàng)目中名列前茅,是 Apache 最活躍的項(xiàng)目之一。我們?cè)?Github 上 Star 的數(shù)量,以及 Flink 貢獻(xiàn)者數(shù)量的增長(zhǎng)趨勢(shì)也是非常喜人的。最近幾年來(lái),我們一直處在一個(gè)加速上漲的過(guò)程,每年都是平均 30% 以上的數(shù)據(jù)增長(zhǎng),可以看出 Flink 整個(gè)生態(tài)的繁榮和高速發(fā)展。
2.Apache Flink 年度發(fā)布總結(jié)
我們?cè)倩仡櫼幌?2020 年整個(gè)社區(qū)在技術(shù)上取得的成果。Flink 社區(qū)在 2020 年發(fā)布了三個(gè)大的版本, Flink-1.10,Flink-1.11,以及 12 月最新發(fā)布的 Flink-1.12 三大版本。這三個(gè)版本相對(duì)于去年收官的版本 Flink-1.9 有非常大的進(jìn)步。
在 Flink-1.9 中,我們完成了將 Blink 代碼貢獻(xiàn)合并進(jìn)入 Flink 社區(qū),使得 Flink 流批一體架構(gòu)正式啟動(dòng)。今年我們又通過(guò) 1.10、1.11、1.12 這三個(gè)版本對(duì) Flink 流批一體架構(gòu)做了重要的升級(jí)和落地。同時(shí)在 Flink SQL 的開(kāi)發(fā)場(chǎng)景下,我們不僅支持了流批一體的 SQL,同時(shí)也支持讀取數(shù)據(jù)庫(kù) binlog 的 CDC,并且對(duì)接了新一代數(shù)據(jù)湖的架構(gòu)。Flink 在 AI 場(chǎng)景下的應(yīng)用也越來(lái)越廣泛,所以我們?cè)?Python 語(yǔ)言上也提供了大量支持,PyFlink 已經(jīng)可以完整的支持 Flink 的開(kāi)發(fā)。在 K8s 的生態(tài)上,我們也做了很多的工作。
Flink 經(jīng)過(guò)今年三個(gè)版本的迭代以后,已經(jīng)可以完整的以云原生的方式運(yùn)行在 K8s 的生態(tài)之上,去除了對(duì) Hadoop 的依賴。以后在 K8s 生態(tài)之上也可以使 Flink 的部署與其他的在線業(yè)務(wù)進(jìn)行更好的混布。
3.Apache Flink 中文社區(qū)持續(xù)火熱
在此也跟大家分享一下 Flink 中文社區(qū)的發(fā)展。
首先,從郵件列表來(lái)看,Flink 項(xiàng)目可能是 Apache 頂級(jí)項(xiàng)目中唯一一個(gè)開(kāi)通中文用戶郵件列表的項(xiàng)目。Apache 作為一個(gè)國(guó)際化的軟件基金會(huì),基本上以英文交流的方式為主,由于 Flink 在中國(guó)的活躍度空前,所以我們也開(kāi)通了中文郵件列表。目前中文郵件列表的活躍度甚至已經(jīng)超過(guò)英文郵件列表,成為全球 Flink 最活躍的地區(qū)。
其次,社區(qū)也開(kāi)通了 Flink 的中文社區(qū)公眾號(hào)(上圖左側(cè)),每周推送社區(qū)資訊、活動(dòng)信息、最佳實(shí)踐等內(nèi)容為開(kāi)發(fā)者提供了解社區(qū)進(jìn)展的窗口,目前超過(guò) 3 萬(wàn)名活躍的開(kāi)發(fā)者訂閱我們,全年推送超過(guò) 200 篇與 Flink 技術(shù),生態(tài)以及實(shí)踐相關(guān)的最新資訊。
前段時(shí)間,我們還推出了 Flink 社區(qū)官方中文學(xué)習(xí)網(wǎng)站(https://flink-learning.org.cn/),希望幫助更多的開(kāi)發(fā)者方便的學(xué)習(xí) Flink 技術(shù),了解 Flink 的行業(yè)實(shí)踐,同時(shí)我們的 Flink 社區(qū)的釘釘大群也為大家提供了技術(shù)交流的平臺(tái),歡迎大家加入,進(jìn)行技術(shù)的交流。
4.Apache Flink 成為實(shí)時(shí)計(jì)算事實(shí)標(biāo)準(zhǔn)
現(xiàn)在 Flink 已經(jīng)成為了實(shí)時(shí)計(jì)算事實(shí)上的標(biāo)準(zhǔn),我相信目前國(guó)內(nèi)外各種主流的 IT 或科技驅(qū)動(dòng)的公司,都已采用 Flink 做實(shí)時(shí)計(jì)算。Flink Forward Asia 2020 也邀請(qǐng)到了 40 多家國(guó)內(nèi)外一流公司分享他們的 Flink 的技術(shù)和實(shí)踐,非常感謝這些公司的講師們、專家們來(lái)分享。我相信未來(lái)各行各業(yè)會(huì)有更多的公司采用 Flink 去解決實(shí)時(shí)數(shù)據(jù)的問(wèn)題。
技術(shù)創(chuàng)新:Apache Flink社區(qū)發(fā)展的核心驅(qū)動(dòng)力
1. 流計(jì)算引擎的內(nèi)核技術(shù)創(chuàng)新
接下來(lái)主要跟大家介紹技術(shù)方面 Flink 社區(qū)在 2020 年的發(fā)展。我們相信技術(shù)創(chuàng)新是開(kāi)源項(xiàng)目、開(kāi)源社區(qū)持續(xù)發(fā)展的核心驅(qū)動(dòng)力。這部分將分為三個(gè)方向來(lái)分享,首先介紹一下 Flink 在流計(jì)算引擎內(nèi)核的一些技術(shù)創(chuàng)新。
Unaligned Checkpoint - 優(yōu)化加速
第一個(gè)例子是非對(duì)齊式的 Checkpoint。Checkpoint 技術(shù)需要不斷的在實(shí)時(shí)的數(shù)據(jù)流中插入 barrier,做定期的 snapshot,這是 Flink 最基本的理念之一。在現(xiàn)有的 Checkpoint 模式下,因?yàn)樾枰獙?duì)齊 barrier,所以在反壓或者數(shù)據(jù)計(jì)算壓力非常大的情況下,Checkpoint 有可能是做不出來(lái)的。所以我們今年在 Flink 社區(qū)里做了一個(gè)非對(duì)齊的 Checkpoint,使得在反壓的情況下,Checkpoint 也能夠比較快速的做出來(lái)。
非對(duì)齊的 Checkpoint 和現(xiàn)有的對(duì)齊的 Checkpoint 可以通過(guò)設(shè)置 alignment timeout 進(jìn)行自動(dòng)切換:正常情況下做對(duì)齊式 Checkpoint,而在反壓的時(shí)候切換到非對(duì)齊的 Checkpoint。
Approximate Failover – 更加靈活的容錯(cuò)模式
第二個(gè)技術(shù)創(chuàng)新是在容錯(cuò)方面。眾所周知,Flink 的數(shù)據(jù)是支持強(qiáng)一致性(exactly-once)的。但是為了保證強(qiáng)一致性,其實(shí)在整個(gè)系統(tǒng)的可用性上有一些 trade off。為了保證數(shù)據(jù)強(qiáng)一致性,任何一個(gè) Flink 節(jié)點(diǎn)的失敗都會(huì)導(dǎo)致 Flink 全部節(jié)點(diǎn)回滾到上一次的 Checkpoint,在這個(gè)過(guò)程中需要進(jìn)行整個(gè) DAG 圖的重啟。在重啟的過(guò)程中業(yè)務(wù)會(huì)有一個(gè)短時(shí)間的中斷和回滾。其實(shí)很多場(chǎng)景對(duì)數(shù)據(jù)的強(qiáng)一致性不是必須的,對(duì)于少量數(shù)據(jù)的損失是可以接受的。對(duì)于一些采樣數(shù)據(jù)的統(tǒng)計(jì)或者機(jī)器學(xué)習(xí)場(chǎng)景下特征計(jì)算,并不是說(shuō)一條數(shù)據(jù)都不能丟,這些應(yīng)用場(chǎng)景反而對(duì)數(shù)據(jù)的可用性有更高的要求。
所以我們?cè)谏鐓^(qū)里創(chuàng)新做一種新的容錯(cuò)模式,Approximate Failover,一個(gè)更加靈活的容錯(cuò)模式,使得任何一個(gè)節(jié)點(diǎn)失敗,只對(duì)這個(gè)節(jié)點(diǎn)本身進(jìn)行重啟和恢復(fù),這樣的話整個(gè)圖不用重啟,也就是說(shuō)整個(gè)的數(shù)據(jù)流程不會(huì)中斷。
Nexmark - Streaming Benchmark
同時(shí),我們?cè)诹饔?jì)算方向發(fā)現(xiàn)缺乏一個(gè)比較標(biāo)準(zhǔn)的 Benchmark 工具。在傳統(tǒng)的批計(jì)算中,有各種 TPC Benchmark 可以比較完善的覆蓋傳統(tǒng)批計(jì)算的場(chǎng)景。而在實(shí)時(shí)流計(jì)算場(chǎng)景下則缺乏標(biāo)準(zhǔn)的 Benchmark。基于 Nexmark 的一篇論文,我們推出了第一版包含 16 個(gè) SQL Query 的 benchmark 工具 Nexmark。Nexmark 有三個(gè)特點(diǎn):
第一, 覆蓋場(chǎng)景更全面
- 基于在線拍賣系統(tǒng)業(yè)務(wù)模型設(shè)計(jì)
- 16 個(gè) Query,全面覆蓋常用流計(jì)算場(chǎng)景
- ANSI SQL,標(biāo)準(zhǔn)化,更容易擴(kuò)展
第二, 更加方便易用
- 純內(nèi)存數(shù)據(jù)源生成器,靈活調(diào)控負(fù)載
- 無(wú)外部系統(tǒng)依賴
- 性能指標(biāo)采集自動(dòng)化
第三,開(kāi)源,開(kāi)放
Nexmark 已經(jīng)開(kāi)源 https://github.com/nexmark/nexmark,大家如果希望比對(duì)不同 Flink 版本之間流引擎的差異,或者對(duì)比不同的流計(jì)算引擎之間的差異,都可以采用這個(gè)工具。
2.Flink 架構(gòu)的演進(jìn)
全新的流批一體架構(gòu)
再介紹一下 Flink 架構(gòu)的演進(jìn),Flink 是一個(gè)流計(jì)算驅(qū)動(dòng)的引擎,它的核心是 Streaming。但是它可以基于 Streaming 的內(nèi)核,實(shí)現(xiàn)流批一體更全能的架構(gòu)。
2020 年,Flink 在流批一體上走出了堅(jiān)實(shí)的一步,可以抽象的總結(jié)為 Flink 1.10 和 1.11 這兩個(gè)大的版本,主要是完成 SQL 層的流批一體化和實(shí)現(xiàn)生產(chǎn)可用性。我們實(shí)現(xiàn)了統(tǒng)一的流批一體的 SQL 和 Table 的表達(dá)能力,以及統(tǒng)一的 Query Processor,統(tǒng)一的 Runtime。
在剛發(fā)布的 1.12 版本中,我們也對(duì) DataStream API 進(jìn)行了流批一體化。在 DataStream 原生的流的算子上增加批的算子,也就是說(shuō) DataStream 也可以有兩種執(zhí)行模式,批模式和流模式里面也可以混合批算子和流算子。
正在規(guī)劃的 1.13 的版本中,會(huì)徹底實(shí)現(xiàn) DataStream 流批一體化的算子,整個(gè)的計(jì)算框架和 SQL 一樣,完全都是流批一體化的計(jì)算能力。這樣一來(lái),原來(lái) Flink 中的 DataSet 這套老的 API 就可以去掉,完全實(shí)現(xiàn)真正的流批一體的架構(gòu)。
在全新的流批一體的架構(gòu)之下,整個(gè) Flink 的機(jī)制也更加清晰。我們有兩種 API,一個(gè)是 Table 或者 SQL 的關(guān)系型 API,還有 DataStream 這種可以更靈活控制物理執(zhí)行的 API。無(wú)論是高層的 API(Table 或者 SQL),還是低級(jí)的 API(DataStream),都可以實(shí)現(xiàn)流批一體的統(tǒng)一表達(dá)。我們還可以將用戶的需求表達(dá)的圖轉(zhuǎn)換為一套統(tǒng)一的執(zhí)行 DAG 圖。這套執(zhí)行 DAG 圖中,可以使用 Bounded Stream,也可以使用 Unbounded Stream,也就是有限流和無(wú)限流兩種模式。我們的 Unified Connector 的框架也是流批一體的統(tǒng)一框架:可以讀流式的存儲(chǔ),也可以讀批式的存儲(chǔ),整個(gè)架構(gòu)將會(huì)把流和批真正融為一體。
在核心的 Runtime 層也實(shí)現(xiàn)了流批一體。調(diào)度和 Shuffle 是 Runtime 層最核心的兩部分。在調(diào)度層支持 Pluggable 的插件機(jī)制,可以實(shí)現(xiàn)不同的調(diào)度策略應(yīng)對(duì)流、批、甚至流批混合的場(chǎng)景。在 Shuffle Service 層面,也支持流式和批式的 Shuffle。
同時(shí)我們正在做更新一代的 Shuffle Service 的框架:Remote Shuffle Service。Remote Shuffle Service 可以部署到 K8s 里面,實(shí)現(xiàn)存儲(chǔ)計(jì)算的分離。就是說(shuō),Flink 的計(jì)算層和 Shuffle 類似于一個(gè)存儲(chǔ)服務(wù)層,完全解耦的部署,讓 Flink 的運(yùn)行更加具有靈活性。
TPC-DS Benchmark
批的性能究竟如何是大家比較關(guān)心的一個(gè)問(wèn)題。經(jīng)過(guò)三個(gè)版本的努力之后,Flink-1.12 比 Flink-1.9(去年的版本)已經(jīng)有三倍的提升。可以看到,在 10TB 數(shù)據(jù)量,20 臺(tái)機(jī)器的情況下,我們的 TPC-DS 的運(yùn)行時(shí)間已經(jīng)收斂到 1 萬(wàn)秒以內(nèi)了。所以 Flink 的批處理性能已經(jīng)完全達(dá)到生產(chǎn)標(biāo)準(zhǔn),不亞于任何一個(gè)業(yè)界目前主流的批處理引擎。
流批一體數(shù)據(jù)集成
流批一體不只是一個(gè)技術(shù)上的問(wèn)題,我想更詳細(xì)的解釋一下流批一體架構(gòu)到底怎么去改變?cè)诓煌湫蛨?chǎng)景下的數(shù)據(jù)處理的方式和數(shù)據(jù)分析的架構(gòu)。
我們先看第一個(gè),在大數(shù)據(jù)場(chǎng)景下經(jīng)常需要數(shù)據(jù)同步或者數(shù)據(jù)集成,也就是將數(shù)據(jù)庫(kù)中的數(shù)據(jù)同步到大數(shù)據(jù)的數(shù)倉(cāng)或者其他存儲(chǔ)中。上圖中的左邊是傳統(tǒng)的經(jīng)典數(shù)據(jù)集成的模式之一,全量的同步和增量的同步實(shí)際上是兩套技術(shù),我們需要定期將全量同步的數(shù)據(jù)跟增量同步數(shù)據(jù)做 merge,不斷的迭代來(lái)把數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到數(shù)據(jù)倉(cāng)庫(kù)中。
但基于 Flink 流批一體的話,整個(gè)數(shù)據(jù)集成的架構(gòu)將截然不同。因?yàn)?Flink SQL 也支持?jǐn)?shù)據(jù)庫(kù)(像 MySQL 和 PG)的 CDC 語(yǔ)義,所以可以用 Flink SQL 一鍵同步數(shù)據(jù)庫(kù)的數(shù)據(jù)到 Hive、ClickHouse、TiDB 等開(kāi)源的數(shù)據(jù)庫(kù)或開(kāi)源的 KV 存儲(chǔ)中。在 Flink 流批一體架構(gòu)的基礎(chǔ)上,Flink 的 connector 也是流批混合的,它可以先讀取數(shù)據(jù)庫(kù)全量數(shù)據(jù)同步到數(shù)倉(cāng)中,然后自動(dòng)切換到增量模式,通過(guò) CDC 讀 Binlog 進(jìn)行增量和全量的同步,Flink 內(nèi)部都可以自動(dòng)的去協(xié)調(diào)好,這就是流批一體的價(jià)值。
基于 Flink 的流批一體數(shù)倉(cāng)架構(gòu)
第二個(gè)變化,數(shù)倉(cāng)架構(gòu)。目前主流數(shù)倉(cāng)架構(gòu)都是一套典型的離線數(shù)倉(cāng)和一套新的實(shí)時(shí)數(shù)倉(cāng),但這兩套技術(shù)棧是分開(kāi)的。在離線數(shù)倉(cāng)里,大家還是習(xí)慣用 Hive 或者 Spark,在實(shí)時(shí)數(shù)倉(cāng)中用 Flink 加 Kafka。但是這個(gè)方案總結(jié)下來(lái)有三個(gè)問(wèn)題需要解決:
- 兩套開(kāi)發(fā)流程,成本高。
- 數(shù)據(jù)鏈路冗余。數(shù)倉(cāng)的經(jīng)典架構(gòu)大家都知道,ODS 層,DWD 層,DWS 層。在 DWD 的明細(xì)層可以看到實(shí)時(shí)數(shù)倉(cāng)和離線數(shù)倉(cāng)經(jīng)常做的是一模一樣的事情,如數(shù)據(jù)清洗、數(shù)據(jù)補(bǔ)齊、數(shù)據(jù)過(guò)濾等,兩套鏈路將上面的事情做了兩遍。
- 數(shù)據(jù)口徑的一致性難以保證。實(shí)時(shí)報(bào)表需要實(shí)時(shí)觀看,同時(shí)每天晚上會(huì)再做一次離線報(bào)表用于第二天分析。但是這兩份報(bào)表的數(shù)據(jù)在時(shí)間的維度上可能是不一致的,因?yàn)樗怯蓛商滓嫠愠鰜?lái)的,可能有兩套用戶代碼,兩套 UDF,兩套 SQL,兩套數(shù)倉(cāng)的構(gòu)建模型,在業(yè)務(wù)上造成了巨大的困惑,很難通過(guò)資源或人力來(lái)彌補(bǔ)。
如果用新的流批一體架構(gòu)來(lái)解決,以上難題將極大降低。
- 首先,Flink 是一套 Flink SQL 開(kāi)發(fā),不存在兩套開(kāi)發(fā)成本。一個(gè)開(kāi)發(fā)團(tuán)隊(duì),一套技術(shù)棧,就可以做所有的離線和實(shí)時(shí)業(yè)務(wù)統(tǒng)計(jì)的問(wèn)題。
- 第二,數(shù)據(jù)鏈路也不存在冗余,明細(xì)層的計(jì)算一次即可,不需要離線再算一遍。
- 第三,數(shù)據(jù)口徑天然一致。無(wú)論是離線的流程,還是實(shí)時(shí)的流程,都是一套引擎,一套 SQL,一套 UDF,一套開(kāi)發(fā)人員,所以它天然是一致的,不存在實(shí)時(shí)和離線數(shù)據(jù)口徑不一致的問(wèn)題。
基于 Flink 的流批一體數(shù)據(jù)湖架構(gòu)
再往前走一步,我們通常會(huì)把數(shù)據(jù)落到 Hive 存儲(chǔ)層,但是當(dāng)數(shù)據(jù)規(guī)模逐漸的增大,也存在一些瓶頸。比如說(shuō)數(shù)據(jù)文件規(guī)模增大以后,元數(shù)據(jù)的管理可能是瓶頸。還有一個(gè)很重要的問(wèn)題,Hive 不支持?jǐn)?shù)據(jù)的實(shí)時(shí)更新。Hive 沒(méi)有辦法實(shí)時(shí),或者準(zhǔn)實(shí)時(shí)化地提供數(shù)倉(cāng)能力。現(xiàn)在比較新的數(shù)據(jù)湖架構(gòu),在一定程度上可以解決 Hive 作為數(shù)倉(cāng)的問(wèn)題。數(shù)據(jù)湖可以解決這種更具擴(kuò)展性的元數(shù)據(jù)的問(wèn)題,而且數(shù)據(jù)湖的存儲(chǔ)支持?jǐn)?shù)據(jù)的更新,是一個(gè)流批一體的存儲(chǔ)。數(shù)據(jù)湖存儲(chǔ)與 Flink 結(jié)合,就可以將實(shí)時(shí)離線一體化的數(shù)倉(cāng)架構(gòu)演變成實(shí)時(shí)離線一體化的數(shù)據(jù)湖架構(gòu)。比如:
Flink + Iceberg:
- 通用化設(shè)計(jì),解耦計(jì)算引擎,開(kāi)放數(shù)據(jù)格式
- 提供基礎(chǔ) ACID 保證以及 Snapshot 功能
- 存儲(chǔ)流批統(tǒng)一,支持批量和細(xì)粒度更新
- 低成本的元數(shù)據(jù)管理
- 0.10 已發(fā)布 Flink 實(shí)時(shí)寫(xiě)入和批量讀取分析功能
- 0.11 規(guī)劃自動(dòng)小文件合并和 Upsert 支持。
另外,Flink 跟 Hudi 的整合,我們也在跟 Hudi 社區(qū)做比較密切的合作,未來(lái)的幾個(gè)月我們將會(huì)推出 Flink 加 Hudi 的完整的解決方案。
Flink + Hudi:
- Upsert 功能支持較為成熟
- Table 組織方式靈活(根據(jù)場(chǎng)景選擇 copy on write 還是 merge on read)
- Flink 與 Hudi 的集成正在積極對(duì)接中
3.大數(shù)據(jù)與AI一體化
最后一個(gè)主流技術(shù)方向就是 AI,現(xiàn)在 AI 是非常火的一個(gè)場(chǎng)景,同時(shí) AI 對(duì)大數(shù)據(jù)存在著很強(qiáng)的算力需求。接下來(lái)跟大家分享 Flink 在 AI 場(chǎng)景下,社區(qū)做的一些事情,以及未來(lái)的規(guī)劃。
PyFlink 逐步走向成熟
首先我們看一下語(yǔ)言層,因?yàn)?AI 的開(kāi)發(fā)者很喜歡用 Python,所以 Flink 提供了 Python 語(yǔ)言的支持,在 2020 年社區(qū)做了很多的工作,我們的 PyFlink 項(xiàng)目也取得了很多的成果。
Python 版本的 Table 和 DataStream API:
- Python UDX 支持 logging、metrics 等功能,方便作業(yè)調(diào)試及監(jiān)控
- 用戶可以用純 Python 語(yǔ)言開(kāi)發(fā) Flink 程序
SQL 中支持 Python UDX:
- 包括 Python UDF、Python UDTF 以及 Python UDAF
- SQL 開(kāi)發(fā)人員也可以直接使用 Python 庫(kù)
增加 Pandas 類庫(kù)支持:
- 支持 Pandas UDF、Pandas UDAF 等功能
- 支持 Python Table 與 Pandas DataFrame 的互轉(zhuǎn)
- 用戶可以在 Flink 程序中使用 Pandas 類庫(kù)。
Alink 新增數(shù)十個(gè)開(kāi)源算法
在算法層面,阿里巴巴去年(2019)開(kāi)源了 Alink,一套在 Flink 上的流批一體的傳統(tǒng)機(jī)器學(xué)習(xí)算法。今年阿里巴巴的機(jī)器學(xué)習(xí)團(tuán)隊(duì)也在 Alink 上繼續(xù)開(kāi)源數(shù) 10 種新的算法,去解決更多場(chǎng)景下的算法組件的問(wèn)題,進(jìn)一步提升機(jī)器學(xué)習(xí)的開(kāi)發(fā)體驗(yàn)。我們希望未來(lái)隨著 Flink 新的 DataStream 的 API 也支持流批一體的迭代能力,我們會(huì)將 Alink 基于新的 DataStream 上面的迭代能力貢獻(xiàn)到 Flink 的機(jī)器學(xué)習(xí)中,讓標(biāo)準(zhǔn)的 Flink 機(jī)器學(xué)習(xí)能有一個(gè)比較大的突破。
大數(shù)據(jù)與 AI 一體化流程管理
大數(shù)據(jù)與 AI 一體化是最近很值得探討的問(wèn)題之一。大數(shù)據(jù)和 AI 技術(shù)是水乳交融的。通過(guò)大數(shù)據(jù)加 AI 的很多核心技術(shù)一體化,去解決整個(gè)在線的,比如實(shí)時(shí)推薦,或者其他的在線機(jī)器學(xué)習(xí)的一套完整流程。在這個(gè)過(guò)程中,大數(shù)據(jù)側(cè)重的是數(shù)據(jù)處理、數(shù)據(jù)驗(yàn)證、數(shù)據(jù)分析,而 AI 的技術(shù)更側(cè)重于模型的訓(xùn)練、模型的預(yù)測(cè)等等。
但這一整套的過(guò)程,其實(shí)要大家合力才能去真正解決業(yè)務(wù)的問(wèn)題。阿里巴巴有很強(qiáng)的基因來(lái)做這件事情,Flink 最早誕生于搜索推薦場(chǎng)景,所以我們的在線搜索、在線推薦就是用 Flink 加 TensorFlow 的技術(shù)來(lái)實(shí)現(xiàn)的后臺(tái)機(jī)器學(xué)習(xí)流程。我們也將阿里積累的這套流程做了一個(gè)抽象,把業(yè)務(wù)屬性的東西全部去掉,只把開(kāi)源的純技術(shù)體系留下,它抽象成一套標(biāo)準(zhǔn)的模板,標(biāo)準(zhǔn)的解決方案,并開(kāi)源出來(lái),叫 Flink AI Extended。這個(gè)項(xiàng)目主要由兩個(gè)部分來(lái)組成。
第一,Deep Learning on Flink: Flink 計(jì)算引擎和深度學(xué)習(xí)引擎集成
- Tensorflow / PyTorch on Flink
- 大數(shù)據(jù)計(jì)算任務(wù)和機(jī)器學(xué)習(xí)任務(wù)無(wú)縫對(duì)接。
第二, Flink AI Flow: 基于 Flink 的實(shí)時(shí)機(jī)器學(xué)習(xí)工作流
- 基于事件的流批混合工作流
- 大數(shù)據(jù)與機(jī)器學(xué)習(xí)全鏈路一體化。
我們希望通過(guò)開(kāi)源主流的大數(shù)據(jù)加 AI 的技術(shù)體系,大家都可以快速的應(yīng)用到業(yè)務(wù)場(chǎng)景中,做出來(lái)一套在線機(jī)器學(xué)習(xí)業(yè)務(wù),比如實(shí)時(shí)推薦等。這個(gè)項(xiàng)目目前也是非常靈活,它可以運(yùn)行 Standalone 單機(jī)版,也可以運(yùn)行在 Hadoop YARN,或者 Kubernetes 上。
Flink Native on K8S
K8s 是現(xiàn)在標(biāo)準(zhǔn)化的一個(gè)行為,云原生。我們相信 K8s 的未來(lái)會(huì)更加的廣闊,起碼 Flink 一定要支持在 K8s 之下原生的運(yùn)行,實(shí)現(xiàn)云原生的部署模式。經(jīng)過(guò)今年三個(gè)版本的努力,我們已經(jīng)支持原生的將 Flink 部署到 K8s 里面。Flink 的 job manager 可以跟 K8s 的 master 進(jìn)行直接通信,動(dòng)態(tài)的申請(qǐng)資源,根據(jù)運(yùn)行的負(fù)載動(dòng)態(tài)擴(kuò)縮容。同時(shí)我們完全對(duì)接了 K8s 的 HA 方案,也支持 GPU 的調(diào)度和 CPU 的調(diào)度。所以現(xiàn)在 Flink Native on K8S 這個(gè)方案已經(jīng)非常成熟,如果企業(yè)對(duì) Flink 在 K8s 部署上有訴求,可以使用 Flink-1.12 這個(gè)版本。
Flink 在阿里巴巴的現(xiàn)狀和未來(lái)
技術(shù)的創(chuàng)新和技術(shù)的價(jià)值一定要靠業(yè)務(wù)去檢驗(yàn),業(yè)務(wù)價(jià)值是最終的判定標(biāo)準(zhǔn)。阿里巴巴不僅是 Apache Flink 最大的推動(dòng)者和支持者,同時(shí)也是最大的用戶。下面介紹 Flink 在阿里應(yīng)用的現(xiàn)狀以及后續(xù)規(guī)劃。
1.Flink 在阿里巴巴的發(fā)展歷程
首先看一下 Flink 在阿里巴巴的成長(zhǎng)路線,還是非常有節(jié)奏的。
- 2016 年,我們將 Flink 大規(guī)模運(yùn)行在雙 11 場(chǎng)景,最早的是在搜索推薦的落地,支持了搜索推薦的全鏈路實(shí)時(shí)化,以及在線學(xué)習(xí)的實(shí)時(shí)化。
- 2017 年,我們認(rèn)定 Flink 作為一個(gè)全集團(tuán)級(jí)別的實(shí)時(shí)數(shù)據(jù)處理引擎,支持整個(gè)阿里巴巴集團(tuán)的業(yè)務(wù)。
- 2018 年,我們開(kāi)始上云,第一次通過(guò)將 Flink 推到云上,去積累技術(shù),服務(wù)更多中小企業(yè)。
- 2019 年,我們向國(guó)際化邁進(jìn)了一步,收購(gòu)了 Flink 的創(chuàng)始公司,阿里巴巴投入了更多的資源和人力去推動(dòng) Flink 社區(qū)的發(fā)展。
到今年,我們已經(jīng)看到 Flink 成為了一個(gè)實(shí)時(shí)計(jì)算事實(shí)上的國(guó)際的標(biāo)準(zhǔn)。在全球,許多云廠商和大數(shù)據(jù)的軟件廠商都已經(jīng)將 Flink 內(nèi)置到他們的產(chǎn)品里,成為標(biāo)準(zhǔn)云產(chǎn)品的形態(tài)之一。
2.雙十一全鏈路數(shù)據(jù)實(shí)時(shí)化
今年雙 11,基于 Flink 的實(shí)時(shí)計(jì)算平臺(tái)在阿里內(nèi)部已經(jīng)完整的支持了所有場(chǎng)景的實(shí)時(shí)數(shù)據(jù)的業(yè)務(wù)。在數(shù)據(jù)規(guī)模上,已經(jīng)有超過(guò)數(shù)百萬(wàn)的 CPU Core 在運(yùn)行。今年在資源基本上沒(méi)有增加的情況下,計(jì)算能力相對(duì)去年有一倍的增長(zhǎng)。同時(shí),通過(guò)技術(shù)優(yōu)化,實(shí)現(xiàn)了整個(gè)阿里經(jīng)濟(jì)體的全鏈路數(shù)據(jù)實(shí)時(shí)化。
3.“全鏈路數(shù)據(jù)實(shí)時(shí)化” to ”實(shí)時(shí)離線一體化”
全鏈路數(shù)據(jù)實(shí)時(shí)化不是我們的終點(diǎn),下一步是實(shí)現(xiàn)實(shí)時(shí)離線一體化的訴求。在電商大促的場(chǎng)景下,需要對(duì)實(shí)時(shí)數(shù)據(jù)與離線數(shù)據(jù)做對(duì)比,如果實(shí)時(shí)和離線的數(shù)據(jù)不一致,或者不知道是不是一致的,那就會(huì)對(duì)業(yè)務(wù)造成很大的干擾,業(yè)務(wù)沒(méi)有辦法判斷到底是技術(shù)上的誤差導(dǎo)致的結(jié)果不符合預(yù)期,還是業(yè)務(wù)效果真的不符合預(yù)期。所以今年雙 11,阿里巴巴第一次大規(guī)模落地流批一體的場(chǎng)景以及實(shí)時(shí)離線一體化業(yè)務(wù)場(chǎng)景。
今年雙 11 流批一體的落地場(chǎng)景是天貓的雙11營(yíng)銷大屏分析。通過(guò)大屏數(shù)據(jù)分析,可以看到不同的維度的數(shù)據(jù),對(duì)比雙11當(dāng)天用戶的交易量和一個(gè)月前、甚至去年雙 11,它的增長(zhǎng)是否符合預(yù)期。我們能確保流批結(jié)果是一致的。
此外,我們結(jié)合了阿里巴巴自研的 Hologres 流批一體的存儲(chǔ)能力,加上 Flink 流批一體的計(jì)算能力,實(shí)現(xiàn)了全鏈路的流批一體的數(shù)據(jù)架構(gòu),以及整個(gè)業(yè)務(wù)架構(gòu)。在此架構(gòu)下,我們不僅保持?jǐn)?shù)據(jù)天然的一致性,業(yè)務(wù)上沒(méi)有了干擾,同時(shí)我們使淘寶的小二開(kāi)發(fā)數(shù)據(jù)報(bào)表的開(kāi)發(fā)效率提升了 4~10 倍。
另一方面,Flink 的流任務(wù)和批任務(wù)運(yùn)行在一個(gè)集群里,雙11當(dāng)天巨大的流量到了晚上可能會(huì)變成一個(gè)波谷,這時(shí)我們會(huì)運(yùn)行大量離線的批的分析任務(wù),為第二天的報(bào)表做準(zhǔn)備。所以削峰填谷的應(yīng)用使我們的資源節(jié)省了一倍,這是一個(gè)非常可觀的數(shù)據(jù)。
目前,除了阿里巴巴外,社區(qū)上也有諸多合作密切的伙伴如字節(jié)跳動(dòng)、小米、網(wǎng)易、知乎等在探索使用 Flink 做流批一體統(tǒng)一架構(gòu)的方案。我相信 2020 年是 Flink 新一代數(shù)據(jù)架構(gòu)落地的元年,從全鏈路數(shù)據(jù)實(shí)時(shí)化走向?qū)崟r(shí)離線一體化的元年,并且阿里巴巴已經(jīng)在最核心的雙 11 業(yè)務(wù)場(chǎng)景下進(jìn)行了落地。
明年,會(huì)有更多的企業(yè)嘗試,并貢獻(xiàn)社區(qū)完善新架構(gòu),推動(dòng)社區(qū)朝著新方向:流批一體化、離線實(shí)時(shí)一體化、大數(shù)據(jù)與 AI 一體化演進(jìn)。真正讓技術(shù)創(chuàng)新服務(wù)好業(yè)務(wù),改變大數(shù)據(jù)處理架構(gòu)、大數(shù)據(jù)與 AI 融合的方式,在各行各業(yè)釋放其價(jià)值。
原文鏈接:https://developer.aliyun.com/article/781348?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的蝉联 Apache 最活跃项目,Flink 社区是如何保持高速发展的?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里云MongoDB,一直被模仿,从未被
- 下一篇: 天源迪科阿里云,打造卓越的数字化采购平台