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