采訪嘉賓|王峰(莫問)
作者 | Tina
作為最活躍的大數(shù)據(jù)項(xiàng)目之一,F(xiàn)link 進(jìn)入 Apache 軟件基金會(huì)頂級(jí)項(xiàng)目已經(jīng)有八年了。
Apache Flink 是一款實(shí)時(shí)大數(shù)據(jù)分析引擎,同時(shí)支持流批執(zhí)行模式,并與 Hadoop 生態(tài)可以無縫對(duì)接。2014 年,它被接納為 Apache 孵化器項(xiàng)目,僅僅幾個(gè)月后,它就成為了 Apache 的頂級(jí)項(xiàng)目。
對(duì)于 Flink 來說,阿里有非常適合的流式場(chǎng)景。作為 Flink 的主導(dǎo)力量,阿里從 2015 年開始調(diào)研 Flink,并于 2016 年第一次在搜索場(chǎng)景中上線 Flink。在落地的同時(shí),阿里對(duì) Flink 進(jìn)行大量的修改和完善,讓其適應(yīng)超大規(guī)模業(yè)務(wù)場(chǎng)景。2017 年,阿里已成為 Flink 社區(qū)最大規(guī)模用戶,F(xiàn)link 團(tuán)隊(duì)也達(dá)上百人。這其中的一些早期改進(jìn),阿里在 2018 年的文章《Flink 已經(jīng)足夠強(qiáng)大了嗎?阿里巴巴說:還不夠》中已有詳盡解讀。
2019 年,阿里宣布收購了 Flink 背后的企業(yè),并正式開源內(nèi)部 Flink 版本 Blink,貢獻(xiàn)了超百萬行代碼,極大地推動(dòng)了社區(qū)的良性發(fā)展。在 2021 年雙 11 中,F(xiàn)link 承載的實(shí)時(shí)計(jì)算峰值達(dá)到了每秒 40 億條記錄,數(shù)據(jù)體量也達(dá)到 7 TB 每秒,相當(dāng)于一秒鐘需要讀完 500 萬本《新華字典》。
這幾年,F(xiàn)link 社區(qū)在國內(nèi)外技術(shù)會(huì)議上不斷宣傳推廣,讓 Flink 得到大量采用,各種應(yīng)用場(chǎng)景也變得更加廣泛,生態(tài)快速發(fā)展。Flink 已經(jīng)變得強(qiáng)大,其設(shè)計(jì)目標(biāo)也不再僅僅是流計(jì)算引擎,而是讓絕大部分?jǐn)?shù)據(jù)分析師都可以利用 Flink 流批一體 API 搭建實(shí)時(shí)數(shù)據(jù)集成、分析、風(fēng)控和在線機(jī)器學(xué)習(xí)場(chǎng)景解決方案。
2022 年 11 月 26-27 日,F(xiàn)link Forward Asia 2022 于線上召開,這是一次總結(jié)最近發(fā)布的重要功能的機(jī)會(huì)。這一次,F(xiàn)link 流式數(shù)倉功能更加成熟,CDC 也能夠接入多種數(shù)據(jù)庫......InfoQ 趁此機(jī)會(huì),采訪了 Apache Flink 中文社區(qū)發(fā)起人、阿里巴巴開源大數(shù)據(jù)平臺(tái)負(fù)責(zé)人王峰(花名莫問),解讀 Flink 核心技術(shù)的進(jìn)展,并了解 Flink 的未來規(guī)劃。
從流計(jì)算到流批一體計(jì)算
打敗 Storm 和 Spark Streaming 之后,F(xiàn)link 成為了流計(jì)算的唯一標(biāo)準(zhǔn),技術(shù)上已經(jīng)沒有了競爭對(duì)手。
Flink 誕生之初能夠快速打敗上一代流計(jì)算引擎 Storm,憑借的是“有狀態(tài)的流計(jì)算”這個(gè)核心理念和特色。通過合流式計(jì)算和狀態(tài)管理兩項(xiàng)技術(shù),F(xiàn)link 不僅提供了高性能的純流式計(jì)算,同時(shí)也在框架層通過分布式一致性快照技術(shù),為用戶提供了數(shù)據(jù)精準(zhǔn)一致性保證。在莫問看來,這是 Flink 出道后迅速成為流計(jì)算領(lǐng)域新主流的關(guān)鍵原因。
雖然 Spark Streaming 通過借助強(qiáng)大的 Spark 生態(tài)也能夠成為一些流計(jì)算場(chǎng)景的選擇,但其本質(zhì)依然是基于 Spark Batch 引擎構(gòu)建的,非純流執(zhí)行模式還是會(huì)限制其執(zhí)行性能和流語義表達(dá)。
而在批計(jì)算方面,F(xiàn)link 已經(jīng)完成絕大部分工作,并日益成熟。“目前 Flink 已經(jīng)能夠完整跑通批處理標(biāo)準(zhǔn)測(cè)試集 TPC-DS,而且性能也非常不錯(cuò),已經(jīng)達(dá)到主流批處理引擎水平,接下來 Flink 在批處理的成熟度上會(huì)持續(xù)完善和打磨,并結(jié)合自身流處理的天然優(yōu)勢(shì),力求給用戶帶來業(yè)界最好的流批一體計(jì)算體驗(yàn)。”
為什么我們需要流批一體?為什么基于 Flink 的流批一體更有技術(shù)優(yōu)勢(shì)?
我們先從業(yè)務(wù)視角看待這個(gè)問題,早期企業(yè)基本都是離線業(yè)務(wù),基于批處理一天運(yùn)行一次報(bào)表,但數(shù)字世界在不斷進(jìn)化演進(jìn),對(duì)實(shí)時(shí)的需求會(huì)越來越多。實(shí)時(shí)風(fēng)控、實(shí)時(shí) BI 統(tǒng)計(jì)、實(shí)時(shí)推薦、實(shí)時(shí)監(jiān)控,這些都不能等到晚上進(jìn)行(到了晚上可能商品已經(jīng)賣完了,用戶也走了),實(shí)時(shí)化的數(shù)據(jù)分析才能給用戶帶來價(jià)值。逐漸離線和實(shí)時(shí)就會(huì)成為兩條平行割裂的鏈路,并隨著實(shí)時(shí)數(shù)據(jù)業(yè)務(wù)量占比持續(xù)提升,會(huì)有越來越多的任務(wù)要重復(fù)開發(fā)兩遍,開發(fā)者會(huì)開始面臨開發(fā)效率問題。
此外,實(shí)時(shí)和離線鏈路割裂還會(huì)存在業(yè)務(wù)口徑一致性的問題,在之前的技術(shù)方案下,實(shí)時(shí)和離線相當(dāng)于用了兩套工具干活,使用不同的語言、不同的引擎,數(shù)據(jù)口徑也無法一致,這樣的分析結(jié)果就會(huì)干擾業(yè)務(wù)決策,甚至?xí)`導(dǎo)決策失誤。
這時(shí)候流批一體自然而然就成為了解決實(shí)時(shí)離線割裂的“新手段”。用一套計(jì)算引擎開發(fā)出的實(shí)時(shí)離線兩個(gè)業(yè)務(wù)流程,天然是一致的,不會(huì)存在誤差。尤其在一些高時(shí)效的業(yè)務(wù)場(chǎng)景中,如搜索、推薦、廣告,數(shù)據(jù)平臺(tái)中的營銷分析,對(duì)流批一體的需求自然就會(huì)比較高。而且,在搜索推薦場(chǎng)景中,還能將 Flink 流批任務(wù)與在線任務(wù)混部到一起,共用一個(gè)資源池,進(jìn)行統(tǒng)一調(diào)度,從而最大化利用服務(wù)器資源,這在業(yè)界也是比較先進(jìn)的實(shí)踐方式。
流批一體新架構(gòu)能夠帶來的收益是明顯的,但也并不是說它就是“放之四海而皆準(zhǔn)”的一種技術(shù)架構(gòu)。莫問認(rèn)為,“如果當(dāng)前數(shù)據(jù)業(yè)務(wù)基本都在離線數(shù)倉,尚未有一定規(guī)模的實(shí)時(shí)化業(yè)務(wù),那也沒有必要過早去做流批一體改造,因?yàn)檫@樣收益并不大。當(dāng)實(shí)時(shí)業(yè)務(wù)量日益成為主流,相對(duì)離線占比日益增大,或者對(duì)數(shù)據(jù)一致性有越來越強(qiáng)一致的要求的話,那么流批一體架構(gòu)就是面向未來的必然選擇。”
流式數(shù)倉:基于流批一體的新數(shù)倉架構(gòu)
流批一體是一個(gè)技術(shù)理念。
Flink 在 SQL 層提供了流批一體語義表達(dá)能力,即用戶可以寫一套 SQL,從而同時(shí)用在實(shí)時(shí)和離線兩個(gè)場(chǎng)景,從而得到全增量一體化的數(shù)據(jù)開發(fā)體驗(yàn)。
這是流批一體理念的終點(diǎn)嗎?顯然還不夠。因?yàn)樵跀?shù)據(jù)存儲(chǔ)鏈路上,還是存在很大的復(fù)雜性,例如:在實(shí)時(shí)鏈路上,F(xiàn)link 需要將數(shù)據(jù)寫入 Kafka 等流式存儲(chǔ)中,在離線鏈路上,F(xiàn)link 往往要將數(shù)據(jù)寫入到 Hive/Iceberg/Hudi 等批式存儲(chǔ)中。兩條存儲(chǔ)鏈路是割裂的,用戶依然要同時(shí)維護(hù)兩條數(shù)據(jù)鏈路,造成較大的管理難度。
然而目前我們要同時(shí)維護(hù)兩套存儲(chǔ)的原因主要是業(yè)界目前沒有一個(gè)較為生產(chǎn)可用的流批一體存儲(chǔ),同時(shí)支持高效的流讀、流寫、批讀、批寫能力,用戶為了滿足不同業(yè)務(wù)需求(時(shí)效性,可分析性等)只能通過多條鏈路的組合來拼接,甚至還要在不同存儲(chǔ)間同步數(shù)據(jù),這必然會(huì)讓整個(gè)鏈路變得日益復(fù)雜。
那目前業(yè)界是否已經(jīng)存在可用的流批一體存儲(chǔ)來解決這個(gè)問題呢?大家可能會(huì)想到 Apache Hudi 的這個(gè)主流湖存儲(chǔ)項(xiàng)目,Hudi 也確是目前業(yè)界流批一體存儲(chǔ)能力上相對(duì)最完善的技術(shù),但 Hudi 在存儲(chǔ)結(jié)構(gòu)的設(shè)計(jì)上,并不適合大規(guī)模更新。因此,F(xiàn)link 社區(qū)下一個(gè)階段的重點(diǎn)方向就是要去解決這個(gè)用戶痛點(diǎn),將流批一體理念進(jìn)一步完善,提供真正可用的流批一體存儲(chǔ)技術(shù),從而基于流批一體計(jì)算和存儲(chǔ)推出完整的流式數(shù)倉新架構(gòu),這也是 2021 年底 Flink 社區(qū)推出 Flink Table Store 獨(dú)立子項(xiàng)目的背景。
2022 年,F(xiàn)link Table Store 已經(jīng)完成了從 0 到 1 的孵化,并發(fā)布了 2 個(gè) release 版本,除了阿里巴巴,包括字節(jié)跳動(dòng)在內(nèi)的多家公司都已經(jīng)參與了這個(gè)項(xiàng)目的貢獻(xiàn),并有不少公司開始試用。Flink 社區(qū)接下來的重點(diǎn)演進(jìn)方向就是流式數(shù)倉新架構(gòu), 為用戶提供更加簡潔、實(shí)時(shí)化的數(shù)倉架構(gòu),并提供更加一體化的體驗(yàn),這也是 Flink 多年來倡導(dǎo)的流批一體理念的完整落地場(chǎng)景,流批一體計(jì)算和存儲(chǔ)的完美結(jié)合。
在今天的 Flink Forward Asia 2022 上,莫問給大家展示了一個(gè)完整的產(chǎn)品化 Demo,基于阿里的實(shí)時(shí)計(jì)算平臺(tái),在 TPC-H 業(yè)務(wù)背景下跑通了完整的流批一體數(shù)據(jù)處理和分析流程,包括從數(shù)據(jù)庫源頭開始的 Flink CDC 數(shù)據(jù)入湖(寫入 Table Store)、Flink SQL 實(shí)時(shí)流式分析(訂閱 Table Store)以及批量數(shù)據(jù)訂正和實(shí)時(shí)交互查詢,給大家呈現(xiàn)了一個(gè)完整的流式數(shù)倉新架構(gòu)成果。此外,F(xiàn)link 流式數(shù)倉架構(gòu)也是開放的體系,支持對(duì)接其他一切具備流批一體能力的存儲(chǔ)系統(tǒng),例如阿里云的 Hologres,阿里也在內(nèi)部完成了 Flink SQL + Hologres 的企業(yè)級(jí)自研流式數(shù)倉產(chǎn)品,不久也將正式對(duì)外發(fā)布。
基于 Flink 的全增量一體化數(shù)據(jù)集成
數(shù)據(jù)集成是實(shí)時(shí)流處理平臺(tái)中非常重要的一個(gè)應(yīng)用場(chǎng)景,這在 Garnter 2022 年 1 月發(fā)布的流處理平臺(tái)市場(chǎng)引導(dǎo)報(bào)告中也可以得到印證,從全球市場(chǎng)看大概 1/3 的流處理場(chǎng)景是和實(shí)時(shí)數(shù)據(jù)集成相關(guān)的,即通過流處理能力將各種不斷變化數(shù)據(jù)源中的數(shù)據(jù)同步到分析數(shù)據(jù)庫,數(shù)據(jù)倉庫和數(shù)據(jù)湖中,從而確保用戶可以實(shí)時(shí)分析到最新的數(shù)字世界。
隨著實(shí)時(shí)化數(shù)據(jù)分析技術(shù)的普及,用戶的數(shù)據(jù)同步需求也在進(jìn)一步升級(jí),期望能夠使用一套一體化的全量數(shù)據(jù)同步工具,一鍵實(shí)現(xiàn)數(shù)據(jù)同步。但在傳統(tǒng)數(shù)據(jù)集成技術(shù)體系下,全量和實(shí)時(shí)數(shù)據(jù)同步往往需要兩套工具(基于批和流的),并且用戶需要在兩套工具之間進(jìn)行協(xié)同,因此要真正實(shí)現(xiàn)全增量同步流程的無縫對(duì)接并保證數(shù)據(jù)一致性,這個(gè)難度和挑戰(zhàn)是非常大的。但如果能夠利用上 Flink 流批一體融合特性,那實(shí)現(xiàn)全增量一體化的實(shí)時(shí)數(shù)據(jù)集成就變得可行了。
此外,F(xiàn)link 本身也具備了豐富的 Connector 生態(tài),能夠連接業(yè)界各種主流存儲(chǔ),以及優(yōu)秀的分布式集成框架,包括容錯(cuò)和分布式一致性快照等能力。因此在 Flink 的基礎(chǔ)上做全增量一體化數(shù)據(jù)集成,相當(dāng)于“站在巨人肩膀上”,會(huì)更快更容易。
這就是 Flink CDC 項(xiàng)目誕生的背景,其大量借助了 Flink 自身的優(yōu)勢(shì),利用流批一體執(zhí)行模式實(shí)現(xiàn)了全增量同步自動(dòng)切換,基于 Flink Checkpointing 能力實(shí)現(xiàn)了數(shù)據(jù)同步斷點(diǎn)續(xù)傳特性,并基于增量快照一致性讀取算法保證了數(shù)據(jù)同步全程對(duì)在線數(shù)據(jù)庫無鎖操作,這樣對(duì)生產(chǎn)業(yè)務(wù)不會(huì)產(chǎn)生任何影響。
作為流批一體的另一個(gè)創(chuàng)新應(yīng)用場(chǎng)景,CDC 項(xiàng)目發(fā)展速度也非常快,網(wǎng)易、騰訊、Oceanbase、嗶哩嗶哩、Xtransfer 等公司都參與了社區(qū)貢獻(xiàn),GitHub Star 目前已經(jīng)突破 3000,生態(tài)上支持了很多主流數(shù)據(jù)庫,包括 MySQL、Oracle、PostgreSQL、MongoDB、TiDB、PolarDB 和 OceanBase 等。莫問表示,F(xiàn)link CDC 會(huì)進(jìn)一步利用 Flink 社區(qū)的創(chuàng)新成果,接入更多的數(shù)據(jù)源,成為新一代全增量一體化的數(shù)據(jù)集成引擎。
云原生時(shí)代的 Flink
隨著云原生的普及,越來越多的企業(yè)應(yīng)用進(jìn)行了容器化遷移,并通過 K8s 進(jìn)行編排管理。最近幾年,大數(shù)據(jù)領(lǐng)域的 Spark、Kafka 等都開始支持 K8s,使得大數(shù)據(jù)應(yīng)用從傳統(tǒng)的 Yarn 時(shí)代轉(zhuǎn)變?yōu)樵圃鷷r(shí)代。
Flink 社區(qū)很早以前就開始基于云原生來設(shè)計(jì)了,包括 Flink 的資源調(diào)度、流式 Shuffle,都是天然適合云原生的。Flink 作為一個(gè)流式計(jì)算引擎,數(shù)據(jù)的 Shuffle 不需要落盤,都是流式的進(jìn)行數(shù)據(jù)傳輸,分布式計(jì)算之間數(shù)據(jù)的流動(dòng)都是通過網(wǎng)絡(luò)加內(nèi)存,不依賴本地盤,因此天然就是存算分離的架構(gòu)。另外,F(xiàn)link 自帶了一個(gè)狀態(tài)存儲(chǔ),計(jì)算的算子和狀態(tài)訪問是一體的,在算子內(nèi)部就支持狀態(tài)訪問,這個(gè)其實(shí)也在朝著存算分離方向去演進(jìn),也就是說 Flink 隨時(shí)可以關(guān)掉 RocksDB 服務(wù),把狀態(tài)數(shù)據(jù) SnapShot 到持久化的 HDFS 或者是云存儲(chǔ)上。
Flink 作為云原生架構(gòu)下的產(chǎn)物,本身也一直朝著云原生架構(gòu)去設(shè)計(jì),社區(qū)在五六年前就開始做 Flink on K8s。支持 K8s 之后,對(duì) Flink 有很大的幫助,比如部署不依賴 Hadoop 了:只要有 K8s,就可以部署 Flink,也沒有任何依賴。運(yùn)維方案也非常標(biāo)準(zhǔn)化,K8s 的運(yùn)維體系也會(huì)運(yùn)維 Flink。同時(shí),F(xiàn)link 也可以基于容器來進(jìn)行部署,容器給 Flink 帶來了更好的隔離性,包括任務(wù)之間的隔離、多租戶的管理,甚至下一步做 Serverless,也會(huì)更加自然和容易。
在云原生的發(fā)展趨勢(shì)下,自適應(yīng)性非常重要。更好的資源彈性讓業(yè)務(wù)的波動(dòng)也變得更加靈活,而云上的資源也是海量的,用戶可以根據(jù)業(yè)務(wù)的需求不斷彈性調(diào)資源規(guī)模。特別是 Serverless 的環(huán)境下,用戶甚至不需要去考慮機(jī)器資源了。Flink 自身也會(huì)去增加更多的自適應(yīng)的能力,實(shí)現(xiàn)自動(dòng)化的任務(wù)并發(fā)管理和狀態(tài)數(shù)據(jù)管理,從而讓 Flink 能更好地使用云上的彈性機(jī)制。
Apache Flink 正在蓬勃發(fā)展,并在廣大的大數(shù)據(jù)分析生態(tài)中變得不可或缺,逐漸成為了企業(yè)數(shù)據(jù)戰(zhàn)略的關(guān)鍵支柱。但對(duì)于一些傳統(tǒng)企業(yè)來說,如果沒有很強(qiáng)大的大數(shù)據(jù)技術(shù)團(tuán)隊(duì),用開源軟件自建一個(gè)數(shù)據(jù)分析平臺(tái)還是比較困難的。所以提供產(chǎn)品化服務(wù),降低技術(shù)門檻,也是阿里云 Flink 技術(shù)團(tuán)隊(duì)正在做的事情。
阿里云已經(jīng)推出了一款云原生的實(shí)時(shí)計(jì)算 Flink 產(chǎn)品,提供了以 Flink SQL 為核心的開發(fā)運(yùn)維平臺(tái),將阿里內(nèi)部積累的 Flink 生產(chǎn)運(yùn)維經(jīng)驗(yàn)和企業(yè)級(jí)能力都通過產(chǎn)品化的形式開放給廣大中小企業(yè),提供實(shí)時(shí)數(shù)倉、實(shí)時(shí)數(shù)據(jù)集成、實(shí)時(shí)風(fēng)控和實(shí)時(shí)特征工程等解決方案,幫助數(shù)字化企業(yè)加速大數(shù)據(jù)技術(shù)實(shí)時(shí)化升級(jí)。
另外,阿里云提供的 Flink 產(chǎn)品也采用了最先進(jìn)的 Serverless 架構(gòu),用戶只要按需購買計(jì)算資源就可以運(yùn)行方便使用 Flink,讓實(shí)時(shí)計(jì)算更加普惠。莫問表示,未來幾個(gè)月之內(nèi),基于 Flink 的多云 PaaS Serverless 服務(wù)也將在全球范圍公測(cè),作為推動(dòng) Flink 社區(qū)不斷技術(shù)創(chuàng)新的核心研發(fā)團(tuán)隊(duì),阿里云希望把 Flink 技術(shù)生態(tài)進(jìn)一步推向全球
采訪嘉賓簡介
王峰,花名“莫問”,阿里巴巴研究員,2006 年北航畢業(yè)加入阿里巴巴,目前負(fù)責(zé)阿里云開源大數(shù)據(jù)平臺(tái),并擔(dān)任阿里巴巴開源委員會(huì)大數(shù)據(jù)與 AI 方向副主席。2015 年開始將萌芽狀態(tài)的 Apache Flink 引入中國,基于 Flink 推動(dòng)阿里大數(shù)據(jù)進(jìn)入全鏈路實(shí)時(shí)化時(shí)代,并以此為標(biāo)桿效應(yīng)帶動(dòng)了 Flink 在全球各個(gè)行業(yè)的快速普及和發(fā)展,讓 Flink 成為了大數(shù)據(jù)實(shí)時(shí)計(jì)算領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。阿里積極擁抱開源,也主動(dòng)貢獻(xiàn)開源。迄今,阿里已累計(jì)對(duì)外開源了上百個(gè)優(yōu)秀項(xiàng)目,在 GitHub 上 Star 總數(shù)超百萬。
(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )