Flink Forward Asia 2020干貨總結!
剩喜漫天飛玉蝶,不嫌幽谷阻黃鶯。2020 年是不尋常的一年,F(xiàn)link 也在這一年迎來了新紀元。12 月13 – 15 號,2020 Flink Forward Asia(FFA)在春雪的召喚下順利拉開帷幕。Flink Forward Asia 是由 Apache 官方授權,Apache Flink Community China 支持舉辦的會議。經(jīng)過兩年的不斷升級和完善,F(xiàn)link Forward Asia 已成為國內(nèi)最大的 Apache 頂級項目會議,是 Flink 開發(fā)者和使用者的年度盛會!今年由于疫情的原因,F(xiàn)link Forward Asia 首次采用線上線下雙線同步會議的形式,吸引了更多的參會者觀看討論,三天實際總參與人數(shù)(UV)超過 9.2 萬,單日最高觀看人數(shù)(UV)超過 4 萬。

FFA 大會從社區(qū)發(fā)展,業(yè)內(nèi)影響力和 Flink 引擎生態(tài)這三方面總結了 Flink 過去一年內(nèi)的成績。
社區(qū)方面,如上圖所示,根據(jù) Apache 基金會財年報告公布的各項核心指標顯示,F(xiàn)link 在 2020 年蟬聯(lián) Apache 社區(qū)最活躍的項目。不僅如此,F(xiàn)link Github 的星數(shù)(代表項目受歡迎程度)和 Flink 的社區(qū)代碼貢獻者(contributor)數(shù)量在過去數(shù)年中一直保持年均 30%+ 的增長。尤其值得一提的是 Flink 中文社區(qū)的繁榮發(fā)展:Flink 是當前 Apache 頂級項目中唯一一個開通了中文郵件列表([email protected])的項目,且中文郵件列表的活躍度已超過英文郵件列表;Flink 的官方公眾號訂閱數(shù)超過 3 萬人,全年推送超過 200 篇和 Flink 技術,生態(tài)以及實踐相關的最新資訊。此外,F(xiàn)link 官方中文學習網(wǎng)站也已經(jīng)正式開通:https://flink-learning.org.cn/ ,收納了和 Flink 相關的學習資料,場景案例以及活動信息,希望能對 Flink 感興趣的同學有所助益。

在業(yè)界影響力方面,經(jīng)過幾年的發(fā)展,F(xiàn)link 已經(jīng)成為事實上的國內(nèi)外實時計算行業(yè)標準,大部分主流科技公司均已采用 Flink 作為實時計算的技術方案。本屆 Flink Forward Asia 邀請到 40 多家一線國內(nèi)外公司參與分享 Flink 的技術探索和實踐經(jīng)驗,上圖列出了其中部分公司的 Logo。從圖中的 Logo 來看,F(xiàn)link 技術已經(jīng)應用到各行各業(yè),深入到我們的日常點滴生活中,從知識分享到在線教育;從金融服務到理財投資;從長短視頻到在線直播;從實時推薦搜索到電商服務等等。
從 Flink 引擎生態(tài)來看,2020 年,F(xiàn)link 在流計算引擎內(nèi)核,流批一體,擁抱 AI,云原生這四個主打方向上都取得了不錯的成績。特別對于流批一體,今年發(fā)布的三個大版本(Flink-1.10 & 1.11 & 1.12)對流批一體進一步作了升級和完善,并首次在阿里巴巴雙十一最核心的天貓營銷活動分析大屏場景中落地 [1]。經(jīng)歷過雙十一洗禮的流批一體將成為在業(yè)界大規(guī)模推廣的起點,開創(chuàng)流批一體新紀元!
本文將對 Keynote 議題作一些簡單的歸納總結,拋磚引玉,感興趣的小伙伴們可以在官網(wǎng)找到相關主題視頻觀看直播回放。
主會場議題

在主議題之前有兩個環(huán)節(jié)值得提一提。一是阿里巴巴集團副總裁,阿里云智能計算平臺負責人,人工智能計算框架 Caffe 之父賈揚清老師作為開場嘉賓,分享了他對開源與云的思考。他指出,開源讓云更標準化,而大數(shù)據(jù)和人工智能一體化則是必然趨勢。顯而易見地,作為頂級開源項目和實時計算標準的 Flink 在這個過程中承擔極其重要的角色。同時他也對 Flink 如何在未來做到計算普惠化和數(shù)據(jù)智能化提出更多期待,讓 Flink 的小松果在各行各業(yè)的數(shù)據(jù)和智能融合中生根發(fā)芽!二是由阿里云天池平臺和 Intel 聯(lián)合舉辦的第二屆 Apache Flink 極客挑戰(zhàn)賽頒獎典禮。此次挑戰(zhàn)賽聚焦防疫主題,在 Apache Flink 平臺上支持深度學習應用,吸引了來自 14 個國家和地區(qū),705 所高校,1327 家企業(yè)的 3840 位選手,由揚清,李文和湘雯頒獎。

言歸正傳,下面聊聊幾個主議題。
Flink as a Unified Engine –– Now and Next
主議題由 Apache Flink 中文社區(qū)發(fā)起人,阿里云智能實時計算和開放平臺負責人莫問老師開啟,主要介紹 Flink 社區(qū)在 2020 年取得的成果以及未來的發(fā)展方向,主要包括:流計算引擎內(nèi)核,流批一體,F(xiàn)link + AI 融合,云原生這四個方向。值得一題的是,他還特別分享了阿里巴巴作為 Flink 最大的使用者和推動者,在流批一體雙十一核心業(yè)務場景落地的過程中的經(jīng)驗和心得,相信對很多有類似需求的小伙伴們會有啟示。
技術創(chuàng)新是開源項目持續(xù)發(fā)展的核心,所以首先第一個部分是 Flink 社區(qū)在流計算引擎內(nèi)核方面的創(chuàng)新分享:
1)Unaligned Checkpoint
我們知道 Flink 的一個最核心的部分是通過分布式全局輕量快照算法 [2, vldb17] 做 checkpoint 來保證強一致性 exactly once 語義。這個算法通過 task 之間 barrier 的傳遞使得每一個 task 只需要對自己的狀態(tài)進行快照;當 barrier 最終達到 sink 的時候,我們就會得到一個完整的全局快照(checkpoint)。但在數(shù)據(jù)反壓的情況下,barrier 無法流到 sink,會造成 checkpoint 始終無法完成。Unaligned Checkpoint 解決了反壓狀態(tài)下,checkpoint 無法完成的問題。在 unaligned checkpoint 的模式下,F(xiàn)link 可以對每個 task 的 channel state 和 output buffer 也進行快照,這樣 barrier 可以快速傳遞到 sink,使得 checkpoint 不受反壓影響。Unaligned checkpoint 和 aligned checkpoint(現(xiàn)有的 checkpoint 模式)可以通過 alignment timeout 自動智能的切換,下圖給出了示意圖。

2)Approximate Failover –– 更加靈活的容錯模式
流計算內(nèi)核引擎部分的另一個提升是 Approximate 單點 Failover。在強一致性 exactly once 語義下,單個節(jié)點的失敗會導致全部節(jié)點的重新啟動和回滾。但對某些場景,特別是 AI 訓練的場景,其實對語義一致性的要求并沒有那么高,反而對于可用性要求更高,所以社區(qū)引入了 Approximate Failover 的模式:單個節(jié)點的失敗只會引起該失敗節(jié)點的重啟和恢復,而整個數(shù)據(jù)流程是沒有中斷的。Approximate Failover 在 AI 訓練和推薦場景下是強需求,快手和字節(jié)跳動的分享中都有提到。
3)Nexmark –– Streaming Benchmark
目前的實時流計算并沒有行業(yè)內(nèi)公認的 benchmark,為了填補這項空白,基于 NEXMark[3],F(xiàn)link 推出了第一版包含 16 個 SQL Query 的 benchmark 工具 ?Nexmark。Nexmark 一大特點是方便易用,沒有外部系統(tǒng)依賴, 同時支持標準的 ?ANSI SQL。Nexmark 目前業(yè)已開源:https://github.com/nexmark/nexmark,可以用來比對不同流計算引擎之間的差異。
第二個重要的部分是流批一體,開頭提到 2020 年是流批一體的新紀元,為什么這么說呢,莫問老師從流批一體架構演進,F(xiàn)link 批處理性能,以及業(yè)界流批一體數(shù)據(jù)生態(tài)這三個方面給出了答案。
1)流批一體架構演進
Flink-1.10 & 1.11 兩個大版本實現(xiàn)了 SQL & Table 層的流批一體化和解決生產(chǎn)可用性問題;剛剛發(fā)版的 Flink-1.12 解決了 DataStream 層的流批一體化;從 1.13 版本開始,F(xiàn)link 將逐步淘汰 DataSet 這套 API。在全新的流批一體架構中,F(xiàn)link 完成了統(tǒng)一的流批表達,統(tǒng)一的流批執(zhí)行,以及統(tǒng)一可插拔的 runtime 支持。分會場中的《基于 Flink DataStream API 的流批一體處理》有對這個部分更為詳細的介紹。

2)Batch 性能
大家比較關心的批的性能:經(jīng)過三個版本的迭代,以 TPC-DS 為基準,F(xiàn)link-1.12 比 Flink-1.9(去年的版本)提速 3 倍!數(shù)據(jù)量 10TB,20臺 64Core 機器的配置下,TPC-DS 運行時間收斂到萬秒以內(nèi)。這意味著 Flink Batch 的性能已經(jīng)不亞于任何一個業(yè)界主流的 Batch 引擎了。
3)流批一體數(shù)據(jù)生態(tài)
莫問老師指出,流批一體不僅僅只是一個技術問題,它也對業(yè)界數(shù)據(jù)生態(tài)的演化也起到了深遠的作用,比較典型的場景包括數(shù)據(jù)同步集成(數(shù)據(jù)庫里的數(shù)據(jù)同步到數(shù)倉中)和基于 Flink 流批一體的數(shù)倉架構/數(shù)據(jù)湖架構。傳統(tǒng)的數(shù)據(jù)同步集成采用全量增量定時合并的模式,而 Flink 流批一體混合 connector 可以實現(xiàn)全量增量一體化數(shù)據(jù)集成(讀取數(shù)據(jù)庫全量數(shù)據(jù)后,可以自動切換到增量模式,通過 CDC 讀取 binlog 進行增量同步),全量和增量之間無縫自動切換,如下圖所示。

傳統(tǒng)的數(shù)倉架構分別維護一套實時數(shù)倉和離線數(shù)倉鏈路,這樣會造成開發(fā)流程冗余(實時離線兩套開發(fā)流程),數(shù)據(jù)鏈路冗余(兩遍對數(shù)據(jù)的清洗補齊過濾),數(shù)據(jù)口徑不一致(實時和離線計算結果不一致)等問題。而 Flink 的流批一體數(shù)倉架構將實時離線鏈路合二為一,可以完全的解決上述這三個問題。不僅于此,F(xiàn)link 的流批一體架構和數(shù)據(jù)湖所要解決的問題(流批一體存儲問題)也完美契合。現(xiàn)在比較主流的數(shù)據(jù)湖解決方案 Iceberg,Hudi 和 Flink 都有集成。其中,F(xiàn)link + Iceberg 已有完整的集成方案;而 Flink + Hudi 的整合也在積極對接中。
第三個大的方向是與 AI 的融合。莫問老師從語言層,算法層和大數(shù)據(jù)與 AI 一體化流程管理這三個方面總結了 2020 年 Flink 在 AI 融合方面的進展。從語言層來講,F(xiàn)link 對 AI 的主流開發(fā)語言 Python 的支持 PyFlink 逐步走向成熟:Flink 的 DataStream API 和 Table API 都已 Python 化,用戶可以用純 Python 語言開發(fā) Flink 程序;Flink SQL 中支持 Python UDF/UDTF;PyFlink 集成了常用的 Python 類庫如 Pandas,在 PyFlink 中可以直接調(diào)用 Pandas UDF/UDAF。從算法層面來看,去年開源的:Alink https://github.com/alibaba/alink(基于 Flink 的流批一體的傳統(tǒng)機器學習算法庫)新增了數(shù)十個開源算法,提供基于參數(shù)服務器的大規(guī)模分布式訓練,訓練過程與預測服務的銜接更加順暢。

大數(shù)據(jù)與 AI 一體化流程管理也是一個很值得深入探討的問題,其背后的本質問題是在離線學習實時化的大背景下,如何設計離線在線機器學習一體化的流程管理架構,以及該架構如何與大數(shù)據(jù)工作流程相結合,實現(xiàn)大數(shù)據(jù)與機器學習全鏈路一體化的問題。這套完整的解決方案 Flink AI Extended 不僅支持深度學習引擎和 Flink 計算引擎的集成(TensorFlow / PyTorch on Flink),它的工作流(Flink AI Flow)也應用了上述的一體化設計思想。目前 Flink AI Extended 也已經(jīng)開源:https://github.com/alibaba/flink-ai-extended。此外,在分會場議題中有對 Flink AI Extended 更詳細的討論和全流程 demo《基于 Flink 的在線機器學習系統(tǒng)架構探討》,感興趣的同學可以找來看看并試用一下。
此外還有一個重要的方向是?Flink 與云原生生態(tài) Kubernetes 的深度融合。Kubernetes 目前廣泛應用在各種在線業(yè)務上,其生態(tài)本身發(fā)展也很快,可以給 Flink 在生產(chǎn)中提供更好的運維能力。從 Flink-1.10 版本開始,F(xiàn)link 經(jīng)過三個版本的迭代,到 Flink-1.12,F(xiàn)link 已經(jīng)可以原生地運行在 Kubernetes 之上,對接 K8S 的 HA 方案,并不再依賴 ZooKeeper,達到生產(chǎn)可用級別。同時,F(xiàn)link 的 JobManager 可以和 K8S Master 直接通信,實現(xiàn)動態(tài)擴縮容,并支持對 GPU 的資源調(diào)度。

接下來,莫問老師分享了 Flink 在阿里巴巴(Flink 最大的使用者和推動者)的前世,今生和未來。2016 年,F(xiàn)link 在雙十一搜索推薦場景中首次亮相,并用 Flink 實現(xiàn)搜索推薦和在線學習全鏈路實時化。2017 年,F(xiàn)link 成為阿里巴巴集團內(nèi)實時計算的標準解決方案。2018 年,F(xiàn)link 正式上云,使用 Flink 的實時數(shù)據(jù)解決方案更好的為中小企業(yè)服務。2019 年,阿里巴巴收購了 Flink 的初創(chuàng)公司 Ververica,并將 Blink 回饋給社區(qū),向國際化邁進一步。到 2020 年,F(xiàn)link 已經(jīng)成為事實上的全球實時計算標準。目前各大云廠商(阿里云,AWS)和大數(shù)據(jù)廠商(Cloudera)等均已將 Flink 內(nèi)置作為標準的云產(chǎn)品。到今年雙十一,F(xiàn)link 已包攬阿里內(nèi)部所有集團(包括螞蟻,釘釘,菜鳥等)的全鏈路實時化解決方案,規(guī)模達到百萬級 CPU Core。并且在資源沒有增長的情況下,提高了一倍業(yè)務能力。今年雙十一的實時數(shù)據(jù)處理峰值更是達到?40 億條記錄/秒的新高。

莫問老師強調(diào),“全數(shù)據(jù)鏈路實時化”并不是終點,阿里巴巴的目標是“實時離線一體化”。2020 年,F(xiàn)link 迎來了實時離線流批一體的新紀元 –– 首次在雙十一最核心場景天貓營銷活動分析大屏場景中落地,并帶來了巨大的收益:實時和離線邏輯業(yè)務的一體化使得數(shù)據(jù)結果天然保持一致;同時使得業(yè)務開發(fā)效率提升了 4-10 倍;流批任務的錯峰調(diào)度使得資源成本節(jié)省了 1 倍,如上圖所示。在行業(yè)實踐分會場中的《流批一體技術在天貓雙 11 的應用》對此有更詳盡的介紹,感興趣的同學可以參考一下。在行業(yè)內(nèi),字節(jié)跳動,美團,快手,知乎,小米,網(wǎng)易等都在探索 Flink 流批一體的落地。
Flink 助力美團數(shù)倉增量生產(chǎn)
第二場議題由美團實時計算負責人鞠大升老師帶來,主要分享了 Flink 在美團內(nèi)部的應用。鞠大升老師首先分享了美團數(shù)倉的整體架構。如下圖所示。美團數(shù)據(jù)架構包括數(shù)據(jù)集成系統(tǒng)、數(shù)據(jù)處理系統(tǒng)、數(shù)據(jù)消費和數(shù)據(jù)應用四部分。Flink 主要應用在 ?Kafka2Hive、實時數(shù)據(jù)處理、Datalink 等(圖中紅圈的部分),而他本次分享也主要集中在這幾個部分。Flink 在美團的主要應用場景包括實時數(shù)倉,實時分析;推薦搜索;風控監(jiān)控;安全審計。這幾個應用場景其實也是 Flink 現(xiàn)在的幾個最主流的應用場景。在美團的應用場景中,F(xiàn)link 每天的峰值數(shù)據(jù)達到 1.8 億條記錄/s。

美團的分享有兩個比較有趣的部分,一是提出了“增量生產(chǎn)”這個概念。這其實和莫問老師提到的全量增量一體化數(shù)據(jù)集成異曲同工。但在這個概念里,增加了數(shù)據(jù)時效性,數(shù)據(jù)質量和生產(chǎn)成本之間的權衡考量,也即如何在一個數(shù)倉業(yè)務中在滿足時效性的情況下能更有效的控制成本和提升數(shù)據(jù)質量。二是美團基于 Flink 架構解決了分布式異構數(shù)據(jù)源同步(Datalink)的問題。他們基于 Flink 的同步系統(tǒng)可以將同步任務通過 Task Manager 分散到集群中,使得整體架構有很好的擴展性;另一方面,離線和實時的同步任務可以都統(tǒng)一到 Flink 框架中,所以離線和實時所有同步的組件都可以共用。
目前,美團在數(shù)據(jù)處理這一層還沒有實現(xiàn)完全的流批統(tǒng)一,所以鞠大升老師表示,未來的目標希望在數(shù)據(jù)處理以及數(shù)據(jù)存儲本身都能達到流批統(tǒng)一。
Apache Flink 在快手的過去、現(xiàn)在和未來
第三場議題由快手大數(shù)據(jù)架構團隊負責人趙健博老師帶來,主要分享了快手實時計算選型 Flink 的原因和 Flink 在快手內(nèi)部應用的場景,以及快手在這些應用場景內(nèi)的相關技術改進??焓诌x型 Flink 的原因其實回答了為什么 Flink 能成為業(yè)界實時計算的標準:1)亞秒級的處理延遲,這對快手內(nèi)部的實時應用是個硬性強需求;2)豐富的窗口計算模式,自帶的標準化狀態(tài)存儲以及 Exactly Once 的強一致性保證能夠極大的簡化業(yè)務開發(fā)和調(diào)試的復雜度;3)流批一體架構的演進進一步簡化數(shù)據(jù)和業(yè)務架構的復雜性。快手表示非??春?Flink 流批一體在數(shù)據(jù)全場景落地。

快手使用 Flink 從 2017 年開始,從 0 到 1 今年已是第四個年頭,發(fā)展過程如上圖所示??焓质褂?Flink 主要場景包括實時 ETL 數(shù)據(jù)集成,實時報表,實時監(jiān)控,實時特征處理(AI),目前每天的峰值可以達到 6 億條記錄 /s。針對上述每一個場景快手都分享了很詳細的實例,特別是特征處理(Feature Processing/Engineering),在很多 AI 場景中還是很有代表性的。
快手還分享了自研的狀態(tài)存儲(SlimBase)在其內(nèi)部的應用。SlimBase 主要分為三層,State Interface 層,KV Cache 層和 File System(Distributed)層;其中 KV Cache 是讀操作能加速的關鍵。當 SlimBase KV Cache 層都被命中時,SlimBase 相對于 RocksDB 有 3-9 倍的讀寫效率提升;而 Cache 層不能都被命中的情況下(需要訪問文件系統(tǒng)),讀性能有一些下降。除了 SlimBase,快手對 Flink 的穩(wěn)定性(包括硬件故障,依賴服務異常,任務過載)和負載均衡方面都提出一些改進的解決方案。分會場議題《快手基于 Apache Flink 的持續(xù)優(yōu)化實踐》對此有更詳細的介紹。
對于未來的規(guī)劃,趙健博老師老師表示會推動 Flink 的流批一體在快手內(nèi)部落地,并結合 Flink 的流批一體推動 AI 數(shù)據(jù)流實時化以提升訓練模型的迭代速度。隨著越來越多業(yè)務使用 Flink,快手對 Flink 的穩(wěn)定性也提出更多的要求(比如快速 Failover 的能力),所以快手在這方面也會有更多的投入。
Stream is the New File
主議題的最后一場是由戴爾科技集團軟件開發(fā)總監(jiān)滕昱老師帶來的流式存儲議題:Pravega。這個議題比較有趣的是討論了流式存儲的抽象 Stream Abstraction。傳統(tǒng)的文件系統(tǒng)對于流式存儲來說并不是一個好的抽象,原因 1)文件的大小有限制,但是流式數(shù)據(jù)是持續(xù)注入的;2)在持續(xù)的數(shù)據(jù)注入中對存儲的并發(fā)度也需要動態(tài)調(diào)整,這就涉及到多個文件的維護和操作;3)有序的流式數(shù)據(jù)的定位尋址問題在文件系統(tǒng)接口中也無法很好的被支持;4)現(xiàn)在業(yè)界慣用的聯(lián)合使用消息隊列(Kafka)+ 文件系統(tǒng)的混合抽象也仍然沒有減輕應用程序開發(fā)和維護的難度。

根據(jù)上述需求,Dell 科技集團設計了基于 Stream Abstraction 的流式存儲系統(tǒng) Pravega。Pravega 將流存儲動態(tài) scaling,動態(tài) scaling 以后如何保證流數(shù)據(jù)邏輯上有序,流數(shù)據(jù)定位和尋址以及 checkpointing 等等一系列問題都封裝在 Stream abstraction 之下。在這種抽象之下,流式存儲可以和流式計算引擎無縫銜接,也給流式計算屏蔽了很多流存儲端的復雜性,從而使整個端到端僅一次性處理(exactly once)的 pipeline 被極大的簡化(如上圖所示)。目前 Pravega 已經(jīng)是一個 CNCF 開源項目,在 Pravega 最新一期官方 blog(https://blog.pravega.io/)中,Pravega 發(fā)布了基于 OpenMessaging Benchmark 對比 Kafka 和 Pulsar 的各項性能指標。此外,Pravega 在分會場中有一場關于 Pravega Flink connector 的分享,《Pravega Flink connector 的過去,現(xiàn)在和未來》,感興趣的同學可以看一下。
除了主會場阿里巴巴,美團,快手,Dell 科技集團的分享,分會場由行業(yè)實踐,核心技術,開源生態(tài),金融行業(yè),機器學習和實時數(shù)倉六個子議題超過 40 家企業(yè)機構參與分享,包括天貓,字節(jié)跳動,亞馬遜,LinkedIn,愛奇藝,螞蟻,好未來,小米,微博,騰訊,知乎,京東,PingCAP,網(wǎng)易,360 等,后續(xù)會有更多的對分會場議題的專場分享文章,敬請期待!
總結和感想
沒有一個冬天不能逾越,沒有一個春天不會來臨。2020 年是不尋常的一年,雖然疫情肆虐,但是 Flink 社區(qū)在 2020 年持續(xù)繁榮,蟬聯(lián)最活躍的 Apache 項目;Flink 也成為了事實上的國內(nèi)外實時計算標準。過去一年,F(xiàn)link 在流計算引擎內(nèi)核,流批一體,AI融合,云原生這四個方向上都取得了不錯的成績,未來也會在這四個方向上繼續(xù)耕進。2020 年是 Flink 的新紀元,流批一體首次在阿里巴巴雙十一最核心的業(yè)務場景中落地,這將是流批一體在業(yè)界大規(guī)模推廣的起點。未來可期,讓我們攜手共進,一起努力,把握好機遇共同迎接挑戰(zhàn),共創(chuàng)美好的 Flink 2021!
[1]?40億條/秒!Flink流批一體在阿里雙11首次落地的背后
[2, vldb17] [State Management in Apache Flink]
{https://pdfs.semanticscholar.org/6fa0/917417d3c213b0e130ae01b7b440b1868dde.pdf}
[3] [NEXMark – A Benchmark for Queries over Data] {http://datalab.cs.pdx.edu/niagara/pstream/nexmark.pdf}
???下載嘉賓分享 PDF
