投入上百人、經(jīng)歷多次雙11,F(xiàn)link已經(jīng)足夠強大了嗎?

采訪嘉賓|王峰(莫問)

作者 | Tina

作為最活躍的大數(shù)據(jù)項目之一,F(xiàn)link 進入 Apache 軟件基金會頂級項目已經(jīng)有八年了。

Apache Flink 是一款實時大數(shù)據(jù)分析引擎,同時支持流批執(zhí)行模式,并與 Hadoop 生態(tài)可以無縫對接。2014 年,它被接納為 Apache 孵化器項目,僅僅幾個月后,它就成為了 Apache 的頂級項目。

對于 Flink 來說,阿里有非常適合的流式場景。作為 Flink 的主導(dǎo)力量,阿里從 2015 年開始調(diào)研 Flink,并于 2016 年第一次在搜索場景中上線 Flink。在落地的同時,阿里對 Flink 進行大量的修改和完善,讓其適應(yīng)超大規(guī)模業(yè)務(wù)場景。2017 年,阿里已成為 Flink 社區(qū)最大規(guī)模用戶,F(xiàn)link 團隊也達上百人。這其中的一些早期改進,阿里在 2018 年的文章《Flink 已經(jīng)足夠強大了嗎?阿里巴巴說:還不夠》中已有詳盡解讀。

2019 年,阿里宣布收購了 Flink 背后的企業(yè),并正式開源內(nèi)部 Flink 版本 Blink,貢獻了超百萬行代碼,極大地推動了社區(qū)的良性發(fā)展。在 2021 年雙 11 中,F(xiàn)link 承載的實時計算峰值達到了每秒 40 億條記錄,數(shù)據(jù)體量也達到 7 TB 每秒,相當(dāng)于一秒鐘需要讀完 500 萬本《新華字典》。

這幾年,F(xiàn)link 社區(qū)在國內(nèi)外技術(shù)會議上不斷宣傳推廣,讓 Flink 得到大量采用,各種應(yīng)用場景也變得更加廣泛,生態(tài)快速發(fā)展。Flink 已經(jīng)變得強大,其設(shè)計目標(biāo)也不再僅僅是流計算引擎,而是讓絕大部分數(shù)據(jù)分析師都可以利用 Flink 流批一體 API 搭建實時數(shù)據(jù)集成、分析、風(fēng)控和在線機器學(xué)習(xí)場景解決方案。

1.png

2022 年 11 月 26-27 日,F(xiàn)link Forward Asia 2022 于線上召開,這是一次總結(jié)最近發(fā)布的重要功能的機會。這一次,F(xiàn)link 流式數(shù)倉功能更加成熟,CDC 也能夠接入多種數(shù)據(jù)庫......InfoQ 趁此機會,采訪了 Apache Flink 中文社區(qū)發(fā)起人、阿里巴巴開源大數(shù)據(jù)平臺負責(zé)人王峰(花名莫問),解讀 Flink 核心技術(shù)的進展,并了解 Flink 的未來規(guī)劃。

從流計算到流批一體計算

打敗 Storm 和 Spark Streaming 之后,F(xiàn)link 成為了流計算的唯一標(biāo)準(zhǔn),技術(shù)上已經(jīng)沒有了競爭對手。

Flink 誕生之初能夠快速打敗上一代流計算引擎 Storm,憑借的是“有狀態(tài)的流計算”這個核心理念和特色。通過合流式計算和狀態(tài)管理兩項技術(shù),F(xiàn)link 不僅提供了高性能的純流式計算,同時也在框架層通過分布式一致性快照技術(shù),為用戶提供了數(shù)據(jù)精準(zhǔn)一致性保證。在莫問看來,這是 Flink 出道后迅速成為流計算領(lǐng)域新主流的關(guān)鍵原因。

雖然 Spark Streaming 通過借助強大的 Spark 生態(tài)也能夠成為一些流計算場景的選擇,但其本質(zhì)依然是基于 Spark Batch 引擎構(gòu)建的,非純流執(zhí)行模式還是會限制其執(zhí)行性能和流語義表達。

而在批計算方面,F(xiàn)link 已經(jīng)完成絕大部分工作,并日益成熟。“目前 Flink 已經(jīng)能夠完整跑通批處理標(biāo)準(zhǔn)測試集 TPC-DS,而且性能也非常不錯,已經(jīng)達到主流批處理引擎水平,接下來 Flink 在批處理的成熟度上會持續(xù)完善和打磨,并結(jié)合自身流處理的天然優(yōu)勢,力求給用戶帶來業(yè)界最好的流批一體計算體驗。”

為什么我們需要流批一體?為什么基于 Flink 的流批一體更有技術(shù)優(yōu)勢?

我們先從業(yè)務(wù)視角看待這個問題,早期企業(yè)基本都是離線業(yè)務(wù),基于批處理一天運行一次報表,但數(shù)字世界在不斷進化演進,對實時的需求會越來越多。實時風(fēng)控、實時 BI 統(tǒng)計、實時推薦、實時監(jiān)控,這些都不能等到晚上進行(到了晚上可能商品已經(jīng)賣完了,用戶也走了),實時化的數(shù)據(jù)分析才能給用戶帶來價值。逐漸離線和實時就會成為兩條平行割裂的鏈路,并隨著實時數(shù)據(jù)業(yè)務(wù)量占比持續(xù)提升,會有越來越多的任務(wù)要重復(fù)開發(fā)兩遍,開發(fā)者會開始面臨開發(fā)效率問題。

此外,實時和離線鏈路割裂還會存在業(yè)務(wù)口徑一致性的問題,在之前的技術(shù)方案下,實時和離線相當(dāng)于用了兩套工具干活,使用不同的語言、不同的引擎,數(shù)據(jù)口徑也無法一致,這樣的分析結(jié)果就會干擾業(yè)務(wù)決策,甚至?xí)`導(dǎo)決策失誤。

這時候流批一體自然而然就成為了解決實時離線割裂的“新手段”。用一套計算引擎開發(fā)出的實時離線兩個業(yè)務(wù)流程,天然是一致的,不會存在誤差。尤其在一些高時效的業(yè)務(wù)場景中,如搜索、推薦、廣告,數(shù)據(jù)平臺中的營銷分析,對流批一體的需求自然就會比較高。而且,在搜索推薦場景中,還能將 Flink 流批任務(wù)與在線任務(wù)混部到一起,共用一個資源池,進行統(tǒng)一調(diào)度,從而最大化利用服務(wù)器資源,這在業(yè)界也是比較先進的實踐方式。

流批一體新架構(gòu)能夠帶來的收益是明顯的,但也并不是說它就是“放之四海而皆準(zhǔn)”的一種技術(shù)架構(gòu)。莫問認為,“如果當(dāng)前數(shù)據(jù)業(yè)務(wù)基本都在離線數(shù)倉,尚未有一定規(guī)模的實時化業(yè)務(wù),那也沒有必要過早去做流批一體改造,因為這樣收益并不大。當(dāng)實時業(yè)務(wù)量日益成為主流,相對離線占比日益增大,或者對數(shù)據(jù)一致性有越來越強一致的要求的話,那么流批一體架構(gòu)就是面向未來的必然選擇。”

流式數(shù)倉:基于流批一體的新數(shù)倉架構(gòu)

流批一體是一個技術(shù)理念。

Flink 在 SQL 層提供了流批一體語義表達能力,即用戶可以寫一套 SQL,從而同時用在實時和離線兩個場景,從而得到全增量一體化的數(shù)據(jù)開發(fā)體驗。

這是流批一體理念的終點嗎?顯然還不夠。因為在數(shù)據(jù)存儲鏈路上,還是存在很大的復(fù)雜性,例如:在實時鏈路上,F(xiàn)link 需要將數(shù)據(jù)寫入 Kafka 等流式存儲中,在離線鏈路上,F(xiàn)link 往往要將數(shù)據(jù)寫入到 Hive/Iceberg/Hudi 等批式存儲中。兩條存儲鏈路是割裂的,用戶依然要同時維護兩條數(shù)據(jù)鏈路,造成較大的管理難度。

image.png

然而目前我們要同時維護兩套存儲的原因主要是業(yè)界目前沒有一個較為生產(chǎn)可用的流批一體存儲,同時支持高效的流讀、流寫、批讀、批寫能力,用戶為了滿足不同業(yè)務(wù)需求(時效性,可分析性等)只能通過多條鏈路的組合來拼接,甚至還要在不同存儲間同步數(shù)據(jù),這必然會讓整個鏈路變得日益復(fù)雜。

那目前業(yè)界是否已經(jīng)存在可用的流批一體存儲來解決這個問題呢?大家可能會想到 Apache Hudi 的這個主流湖存儲項目,Hudi 也確是目前業(yè)界流批一體存儲能力上相對最完善的技術(shù),但 Hudi 在存儲結(jié)構(gòu)的設(shè)計上,并不適合大規(guī)模更新。因此,F(xiàn)link 社區(qū)下一個階段的重點方向就是要去解決這個用戶痛點,將流批一體理念進一步完善,提供真正可用的流批一體存儲技術(shù),從而基于流批一體計算和存儲推出完整的流式數(shù)倉新架構(gòu),這也是 2021 年底 Flink 社區(qū)推出 Flink Table Store 獨立子項目的背景。

3.png

2022 年,F(xiàn)link Table Store 已經(jīng)完成了從 0 到 1 的孵化,并發(fā)布了 2 個 release 版本,除了阿里巴巴,包括字節(jié)跳動在內(nèi)的多家公司都已經(jīng)參與了這個項目的貢獻,并有不少公司開始試用。Flink 社區(qū)接下來的重點演進方向就是流式數(shù)倉新架構(gòu), 為用戶提供更加簡潔、實時化的數(shù)倉架構(gòu),并提供更加一體化的體驗,這也是 Flink 多年來倡導(dǎo)的流批一體理念的完整落地場景,流批一體計算和存儲的完美結(jié)合。

在今天的 Flink Forward Asia 2022 上,莫問給大家展示了一個完整的產(chǎn)品化 Demo,基于阿里的實時計算平臺,在 TPC-H 業(yè)務(wù)背景下跑通了完整的流批一體數(shù)據(jù)處理和分析流程,包括從數(shù)據(jù)庫源頭開始的 Flink CDC 數(shù)據(jù)入湖(寫入 Table Store)、Flink SQL 實時流式分析(訂閱 Table Store)以及批量數(shù)據(jù)訂正和實時交互查詢,給大家呈現(xiàn)了一個完整的流式數(shù)倉新架構(gòu)成果。此外,F(xiàn)link 流式數(shù)倉架構(gòu)也是開放的體系,支持對接其他一切具備流批一體能力的存儲系統(tǒng),例如阿里云的 Hologres,阿里也在內(nèi)部完成了 Flink SQL + Hologres 的企業(yè)級自研流式數(shù)倉產(chǎn)品,不久也將正式對外發(fā)布。

基于 Flink 的全增量一體化數(shù)據(jù)集成

數(shù)據(jù)集成是實時流處理平臺中非常重要的一個應(yīng)用場景,這在 Garnter 2022 年 1 月發(fā)布的流處理平臺市場引導(dǎo)報告中也可以得到印證,從全球市場看大概 1/3 的流處理場景是和實時數(shù)據(jù)集成相關(guān)的,即通過流處理能力將各種不斷變化數(shù)據(jù)源中的數(shù)據(jù)同步到分析數(shù)據(jù)庫,數(shù)據(jù)倉庫和數(shù)據(jù)湖中,從而確保用戶可以實時分析到最新的數(shù)字世界。

4.png

隨著實時化數(shù)據(jù)分析技術(shù)的普及,用戶的數(shù)據(jù)同步需求也在進一步升級,期望能夠使用一套一體化的全量數(shù)據(jù)同步工具,一鍵實現(xiàn)數(shù)據(jù)同步。但在傳統(tǒng)數(shù)據(jù)集成技術(shù)體系下,全量和實時數(shù)據(jù)同步往往需要兩套工具(基于批和流的),并且用戶需要在兩套工具之間進行協(xié)同,因此要真正實現(xiàn)全增量同步流程的無縫對接并保證數(shù)據(jù)一致性,這個難度和挑戰(zhàn)是非常大的。但如果能夠利用上 Flink 流批一體融合特性,那實現(xiàn)全增量一體化的實時數(shù)據(jù)集成就變得可行了。

5.png

此外,F(xiàn)link 本身也具備了豐富的 Connector 生態(tài),能夠連接業(yè)界各種主流存儲,以及優(yōu)秀的分布式集成框架,包括容錯和分布式一致性快照等能力。因此在 Flink 的基礎(chǔ)上做全增量一體化數(shù)據(jù)集成,相當(dāng)于“站在巨人肩膀上”,會更快更容易。

6.png

這就是 Flink CDC 項目誕生的背景,其大量借助了 Flink 自身的優(yōu)勢,利用流批一體執(zhí)行模式實現(xiàn)了全增量同步自動切換,基于 Flink Checkpointing 能力實現(xiàn)了數(shù)據(jù)同步斷點續(xù)傳特性,并基于增量快照一致性讀取算法保證了數(shù)據(jù)同步全程對在線數(shù)據(jù)庫無鎖操作,這樣對生產(chǎn)業(yè)務(wù)不會產(chǎn)生任何影響。

作為流批一體的另一個創(chuàng)新應(yīng)用場景,CDC 項目發(fā)展速度也非常快,網(wǎng)易、騰訊、Oceanbase、嗶哩嗶哩、Xtransfer 等公司都參與了社區(qū)貢獻,GitHub Star 目前已經(jīng)突破 3000,生態(tài)上支持了很多主流數(shù)據(jù)庫,包括 MySQL、Oracle、PostgreSQL、MongoDB、TiDB、PolarDB 和 OceanBase 等。莫問表示,F(xiàn)link CDC 會進一步利用 Flink 社區(qū)的創(chuàng)新成果,接入更多的數(shù)據(jù)源,成為新一代全增量一體化的數(shù)據(jù)集成引擎。

云原生時代的 Flink

隨著云原生的普及,越來越多的企業(yè)應(yīng)用進行了容器化遷移,并通過 K8s 進行編排管理。最近幾年,大數(shù)據(jù)領(lǐng)域的 Spark、Kafka 等都開始支持 K8s,使得大數(shù)據(jù)應(yīng)用從傳統(tǒng)的 Yarn 時代轉(zhuǎn)變?yōu)樵圃鷷r代。

Flink 社區(qū)很早以前就開始基于云原生來設(shè)計了,包括 Flink 的資源調(diào)度、流式 Shuffle,都是天然適合云原生的。Flink 作為一個流式計算引擎,數(shù)據(jù)的 Shuffle 不需要落盤,都是流式的進行數(shù)據(jù)傳輸,分布式計算之間數(shù)據(jù)的流動都是通過網(wǎng)絡(luò)加內(nèi)存,不依賴本地盤,因此天然就是存算分離的架構(gòu)。另外,F(xiàn)link 自帶了一個狀態(tài)存儲,計算的算子和狀態(tài)訪問是一體的,在算子內(nèi)部就支持狀態(tài)訪問,這個其實也在朝著存算分離方向去演進,也就是說 Flink 隨時可以關(guān)掉 RocksDB 服務(wù),把狀態(tài)數(shù)據(jù) SnapShot 到持久化的 HDFS 或者是云存儲上。

Flink 作為云原生架構(gòu)下的產(chǎn)物,本身也一直朝著云原生架構(gòu)去設(shè)計,社區(qū)在五六年前就開始做 Flink on K8s。支持 K8s 之后,對 Flink 有很大的幫助,比如部署不依賴 Hadoop 了:只要有 K8s,就可以部署 Flink,也沒有任何依賴。運維方案也非常標(biāo)準(zhǔn)化,K8s 的運維體系也會運維 Flink。同時,F(xiàn)link 也可以基于容器來進行部署,容器給 Flink 帶來了更好的隔離性,包括任務(wù)之間的隔離、多租戶的管理,甚至下一步做 Serverless,也會更加自然和容易。

在云原生的發(fā)展趨勢下,自適應(yīng)性非常重要。更好的資源彈性讓業(yè)務(wù)的波動也變得更加靈活,而云上的資源也是海量的,用戶可以根據(jù)業(yè)務(wù)的需求不斷彈性調(diào)資源規(guī)模。特別是 Serverless 的環(huán)境下,用戶甚至不需要去考慮機器資源了。Flink 自身也會去增加更多的自適應(yīng)的能力,實現(xiàn)自動化的任務(wù)并發(fā)管理和狀態(tài)數(shù)據(jù)管理,從而讓 Flink 能更好地使用云上的彈性機制。

Apache Flink 正在蓬勃發(fā)展,并在廣大的大數(shù)據(jù)分析生態(tài)中變得不可或缺,逐漸成為了企業(yè)數(shù)據(jù)戰(zhàn)略的關(guān)鍵支柱。但對于一些傳統(tǒng)企業(yè)來說,如果沒有很強大的大數(shù)據(jù)技術(shù)團隊,用開源軟件自建一個數(shù)據(jù)分析平臺還是比較困難的。所以提供產(chǎn)品化服務(wù),降低技術(shù)門檻,也是阿里云 Flink 技術(shù)團隊正在做的事情。

阿里云已經(jīng)推出了一款云原生的實時計算 Flink 產(chǎn)品,提供了以 Flink SQL 為核心的開發(fā)運維平臺,將阿里內(nèi)部積累的 Flink 生產(chǎn)運維經(jīng)驗和企業(yè)級能力都通過產(chǎn)品化的形式開放給廣大中小企業(yè),提供實時數(shù)倉、實時數(shù)據(jù)集成、實時風(fēng)控和實時特征工程等解決方案,幫助數(shù)字化企業(yè)加速大數(shù)據(jù)技術(shù)實時化升級。

另外,阿里云提供的 Flink 產(chǎn)品也采用了最先進的 Serverless 架構(gòu),用戶只要按需購買計算資源就可以運行方便使用 Flink,讓實時計算更加普惠。莫問表示,未來幾個月之內(nèi),基于 Flink 的多云 PaaS Serverless 服務(wù)也將在全球范圍公測,作為推動 Flink 社區(qū)不斷技術(shù)創(chuàng)新的核心研發(fā)團隊,阿里云希望把 Flink 技術(shù)生態(tài)進一步推向全球

采訪嘉賓簡介

王峰,花名“莫問”,阿里巴巴研究員,2006 年北航畢業(yè)加入阿里巴巴,目前負責(zé)阿里云開源大數(shù)據(jù)平臺,并擔(dān)任阿里巴巴開源委員會大數(shù)據(jù)與 AI 方向副主席。2015 年開始將萌芽狀態(tài)的 Apache Flink 引入中國,基于 Flink 推動阿里大數(shù)據(jù)進入全鏈路實時化時代,并以此為標(biāo)桿效應(yīng)帶動了 Flink 在全球各個行業(yè)的快速普及和發(fā)展,讓 Flink 成為了大數(shù)據(jù)實時計算領(lǐng)域的事實標(biāo)準(zhǔn)。阿里積極擁抱開源,也主動貢獻開源。迄今,阿里已累計對外開源了上百個優(yōu)秀項目,在 GitHub 上 Star 總數(shù)超百萬。

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負任何法律責(zé)任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )