做者:王峯(莫問)、梅源git
剩喜漫天飛玉蝶,不嫌幽谷阻黃鶯。2020 年是不尋常的一年,Flink 也在這一年迎來了新紀元。github
12 月13 – 15 號,2020 Flink Forward Asia(FFA)在春雪的召喚下順利拉開帷幕。Flink Forward Asia 是由 Apache 官方受權,Apache Flink Community China 支持舉辦的會議。通過兩年的不斷升級和完善,Flink Forward Asia 已成爲國內最大的 Apache 頂級項目會議,是 Flink 開發者和使用者的年度盛會!今年因爲疫情的緣由,Flink Forward Asia 首次採用線上線下雙線同步會議的形式,吸引了更多的參會者觀看討論,三天實際總參與人數(UV)超過 9.2 萬,單日最高觀看人數(UV)超過 4 萬。算法
FFA 大會從社區發展,業內影響力和 Flink 引擎生態這三方面總結了 Flink 過去一年內的成績。數據庫
社區方面,如上圖所示,根據 Apache 基金會財年報告公佈的各項核心指標顯示,Flink 在 2020 年蟬聯 Apache 社區最活躍的項目。不只如此,Flink Github 的星數(表明項目受歡迎程度)和 Flink 的社區代碼貢獻者(contributor)數量在過去數年中一直保持年均 30%+ 的增加。尤爲值得一提的是 Flink 中文社區的繁榮發展:Flink 是當前 Apache 頂級項目中惟一一個開通了中文郵件列表(user-zh@flink.apache.org)的項目,且中文郵件列表的活躍度已超過英文郵件列表;Flink 的官方公衆號訂閱數超過 3 萬人,整年推送超過 200 篇和 Flink 技術,生態以及實踐相關的最新資訊。此外,Flink 官方中文學習網站也已經正式開通:https://flink-learning.org.cn/ ,收納了和 Flink 相關的學習資料,場景案例以及活動信息,但願能對 Flink 感興趣的同窗有所助益。apache
在業界影響力方面,通過幾年的發展,Flink 已經成爲事實上的國內外實時計算行業標準,大部分主流科技公司均已採用 Flink 做爲實時計算的技術方案。本屆 Flink Forward Asia 邀請到 40 多家一線國內外公司參與分享 Flink 的技術探索和實踐經驗,上圖列出了其中部分公司的 Logo。從圖中的 Logo 來看,Flink 技術已經應用到各行各業,深刻到咱們的平常點滴生活中,從知識分享到在線教育;從金融服務到理財投資;從長短視頻到在線直播;從實時推薦搜索到電商服務等等。安全
從 Flink 引擎生態來看,2020 年,Flink 在流計算引擎內核,流批一體,擁抱 AI,雲原生這四個主打方向上都取得了不錯的成績。特別對於流批一體,今年發佈的三個大版本(Flink-1.10 & 1.11 & 1.12)對流批一體進一步做了升級和完善,並首次在阿里巴巴雙十一最核心的天貓營銷活動分析大屏場景中落地 [1]。經歷過雙十一洗禮的流批一體將成爲在業界大規模推廣的起點,開創流批一體新紀元!服務器
本文將對 Keynote 議題做一些簡單的概括總結,拋磚引玉,感興趣的小夥伴們能夠在官網找到相關主題視頻觀看直播回放。架構
在主議題以前有兩個環節值得提一提。一是阿里巴巴集團副總裁,阿里雲智能計算平臺負責人,人工智能計算框架 Caffe 之父賈揚清老師做爲開場嘉賓,分享了他對開源與雲的思考。他指出,開源讓雲更標準化,而大數據和人工智能一體化則是必然趨勢。顯而易見地,做爲頂級開源項目和實時計算標準的 Flink 在這個過程當中承擔極其重要的角色。同時他也對 Flink 如何在將來作到計算普惠化和數據智能化提出更多期待,讓 Flink 的小松果在各行各業的數據和智能融合中生根發芽!二是由阿里雲天池平臺和 Intel 聯合舉辦的第二屆 Apache Flink 極客挑戰賽頒獎典禮。這次挑戰賽聚焦防疫主題,在 Apache Flink 平臺上支持深度學習應用,吸引了來自 14 個國家和地區,705 所高校,1327 家企業的 3840 位選手,由揚清,李文和湘雯頒獎。併發
言歸正傳,下面聊聊幾個主議題。負載均衡
主議題由 Apache Flink 中文社區發起人,阿里雲智能實時計算和開放平臺負責人莫問老師開啓,主要介紹 Flink 社區在 2020 年取得的成果以及將來的發展方向,主要包括:流計算引擎內核,流批一體,Flink + AI 融合,雲原生這四個方向。值得一題的是,他還特別分享了阿里巴巴做爲 Flink 最大的使用者和推進者,在流批一體雙十一核心業務場景落地的過程當中的經驗和心得,相信對不少有相似需求的小夥伴們會有啓示。
技術創新是開源項目持續發展的核心,因此首先第一個部分是 Flink 社區在流計算引擎內核方面的創新分享:
咱們知道 Flink 的一個最核心的部分是經過分佈式全局輕量快照算法 [2, vldb17] 作 checkpoint 來保證強一致性 exactly once 語義。這個算法經過 task 之間 barrier 的傳遞使得每個 task 只須要對本身的狀態進行快照;當 barrier 最終達到 sink 的時候,咱們就會獲得一個完整的全局快照(checkpoint)。但在數據反壓的狀況下,barrier 沒法流到 sink,會形成 checkpoint 始終沒法完成。Unaligned Checkpoint 解決了反壓狀態下,checkpoint 沒法完成的問題。在 unaligned checkpoint 的模式下,Flink 能夠對每一個 task 的 channel state 和 output buffer 也進行快照,這樣 barrier 能夠快速傳遞到 sink,使得 checkpoint 不受反壓影響。Unaligned checkpoint 和 aligned checkpoint(現有的 checkpoint 模式)能夠經過 alignment timeout 自動智能的切換,下圖給出了示意圖。
流計算內核引擎部分的另外一個提高是 Approximate 單點 Failover。在強一致性 exactly once 語義下,單個節點的失敗會致使所有節點的從新啓動和回滾。但對某些場景,特別是 AI 訓練的場景,其實對語義一致性的要求並無那麼高,反而對於可用性要求更高,因此社區引入了 Approximate Failover 的模式:單個節點的失敗只會引發該失敗節點的重啓和恢復,而整個數據流程是沒有中斷的。Approximate Failover 在 AI 訓練和推薦場景下是強需求,快手和字節跳動的分享中都有提到。
目前的實時流計算並無行業內公認的 benchmark,爲了填補這項空白,基於 NEXMark[3],Flink 推出了初版包含 16 個 SQL Query 的 benchmark 工具 Nexmark。Nexmark 一大特色是方便易用,沒有外部系統依賴, 同時支持標準的 ANSI SQL。Nexmark 目前業已開源:https://github.com/nexmark/ne... ,能夠用來比對不一樣流計算引擎之間的差別。
第二個重要的部分是流批一體,開頭提到 2020 年是流批一體的新紀元,爲何這麼說呢,莫問老師從流批一體架構演進,Flink 批處理性能,以及業界流批一體數據生態這三個方面給出了答案。
Flink-1.10 & 1.11 兩個大版本實現了 SQL & Table 層的流批一體化和解決生產可用性問題;剛剛發版的 Flink-1.12 解決了 DataStream 層的流批一體化;從 1.13 版本開始,Flink 將逐步淘汰 DataSet 這套 API。在全新的流批一體架構中,Flink 完成了統一的流批表達,統一的流批執行,以及統一可插拔的 runtime 支持。分會場中的《基於 Flink DataStream API 的流批一體處理》有對這個部分更爲詳細的介紹。
你們比較關心的批的性能:通過三個版本的迭代,以 TPC-DS 爲基準,Flink-1.12 比 Flink-1.9(去年的版本)提速 3 倍!數據量 10TB,20臺 64Core 機器的配置下,TPC-DS 運行時間收斂到萬秒之內。這意味着 Flink Batch 的性能已經不亞於任何一個業界主流的 Batch 引擎了。
莫問老師指出,流批一體不只僅只是一個技術問題,它也對業界數據生態的演化也起到了深遠的做用,比較典型的場景包括數據同步集成(數據庫裏的數據同步到數倉中)和基於 Flink 流批一體的數倉架構/數據湖架構。傳統的數據同步集成採用全量增量定時合併的模式,而 Flink 流批一體混合 connector 能夠實現全量增量一體化數據集成(讀取數據庫全量數據後,能夠自動切換到增量模式,經過 CDC 讀取 binlog 進行增量同步),全量和增量之間無縫自動切換,以下圖所示。
傳統的數倉架構分別維護一套實時數倉和離線數倉鏈路,這樣會形成開發流程冗餘(實時離線兩套開發流程),數據鏈路冗餘(兩遍對數據的清洗補齊過濾),數據口徑不一致(實時和離線計算結果不一致)等問題。而 Flink 的流批一體數倉架構將實時離線鏈路合二爲一,能夠徹底的解決上述這三個問題。不只於此,Flink 的流批一體架構和數據湖所要解決的問題(流批一體存儲問題)也完美契合。如今比較主流的數據湖解決方案 Iceberg,Hudi 和 Flink 都有集成。其中,Flink + Iceberg 已有完整的集成方案;而 Flink + Hudi 的整合也在積極對接中。
第三個大的方向是與 AI 的融合。莫問老師從語言層,算法層和大數據與 AI 一體化流程管理這三個方面總結了 2020 年 Flink 在 AI 融合方面的進展。從語言層來說,Flink 對 AI 的主流開發語言 Python 的支持 PyFlink 逐步走向成熟:Flink 的 DataStream API 和 Table API 都已 Python 化,用戶能夠用純 Python 語言開發 Flink 程序;Flink SQL 中支持 Python UDF/UDTF;PyFlink 集成了經常使用的 Python 類庫如 Pandas,在 PyFlink 中能夠直接調用 Pandas UDF/UDAF。從算法層面來看,去年開源的:Alink https://github.com/alibaba/alink (基於 Flink 的流批一體的傳統機器學習算法庫)新增了數十個開源算法,提供基於參數服務器的大規模分佈式訓練,訓練過程與預測服務的銜接更加順暢。
大數據與 AI 一體化流程管理也是一個很值得深刻探討的問題,其背後的本質問題是在離線學習實時化的大背景下,如何設計離線在線機器學習一體化的流程管理架構,以及該架構如何與大數據工做流程相結合,實現大數據與機器學習全鏈路一體化的問題。這套完整的解決方案 Flink AI Extended 不只支持深度學習引擎和 Flink 計算引擎的集成(TensorFlow / PyTorch on Flink),它的工做流(Flink AI Flow)也應用了上述的一體化設計思想。目前 Flink AI Extended 也已經開源:https://github.com/alibaba/fl... 。此外,在分會場議題中有對 Flink AI Extended 更詳細的討論和全流程 demo《基於 Flink 的在線機器學習系統架構探討》,感興趣的同窗能夠找來看看並試用一下。
此外還有一個重要的方向是 Flink 與雲原生生態 Kubernetes 的深度融合。Kubernetes 目前普遍應用在各類在線業務上,其生態自己發展也很快,能夠給 Flink 在生產中提供更好的運維能力。從 Flink-1.10 版本開始,Flink 通過三個版本的迭代,到 Flink-1.12,Flink 已經能夠原生地運行在 Kubernetes 之上,對接 K8S 的 HA 方案,並再也不依賴 ZooKeeper,達到生產可用級別。同時,Flink 的 JobManager 能夠和 K8S Master 直接通訊,實現動態擴縮容,並支持對 GPU 的資源調度。
接下來,莫問老師分享了 Flink 在阿里巴巴(Flink 最大的使用者和推進者)的前世,此生和將來。2016 年,Flink 在雙十一搜索推薦場景中首次亮相,並用 Flink 實現搜索推薦和在線學習全鏈路實時化。2017 年,Flink 成爲阿里巴巴集團內實時計算的標準解決方案。2018 年,Flink 正式上雲,使用 Flink 的實時數據解決方案更好的爲中小企業服務。2019 年,阿里巴巴收購了 Flink 的初創公司 Ververica,並將 Blink 回饋給社區,向國際化邁進一步。到 2020 年,Flink 已經成爲事實上的全球實時計算標準。目前各大雲廠商(阿里雲,AWS)和大數據廠商(Cloudera)等均已將 Flink 內置做爲標準的雲產品。到今年雙十一,Flink 已包攬阿里內部全部集團(包括螞蟻,釘釘,菜鳥等)的全鏈路實時化解決方案,規模達到百萬級 CPU Core。而且在資源沒有增加的狀況下,提升了一倍業務能力。今年雙十一的實時數據處理峯值更是達到 40 億條記錄/秒的新高。
莫問老師強調,「全數據鏈路實時化」並非終點,阿里巴巴的目標是「實時離線一體化」。2020 年,Flink 迎來了實時離線流批一體的新紀元 –– 首次在雙十一最核心場景天貓營銷活動分析大屏場景中落地,並帶來了巨大的收益:實時和離線邏輯業務的一體化使得數據結果自然保持一致;同時使得業務開發效率提高了 4-10 倍;流批任務的錯峯調度使得資源成本節省了 1 倍,如上圖所示。在行業實踐分會場中的《流批一體技術在天貓雙 11 的應用》對此有更詳盡的介紹,感興趣的同窗能夠參考一下。在行業內,字節跳動,美團,快手,知乎,小米,網易等都在探索 Flink 流批一體的落地。
第二場議題由美團實時計算負責人鞠大升老師帶來,主要分享了 Flink 在美團內部的應用。鞠大升老師首先分享了美團數倉的總體架構。以下圖所示。美團數據架構包括數據集成系統、數據處理系統、數據消費和數據應用四部分。Flink 主要應用在 Kafka2Hive、實時數據處理、Datalink 等(圖中紅圈的部分),而他本次分享也主要集中在這幾個部分。Flink 在美團的主要應用場景包括實時數倉,實時分析;推薦搜索;風控監控;安全審計。這幾個應用場景其實也是 Flink 如今的幾個最主流的應用場景。在美團的應用場景中,Flink 天天的峯值數據達到 1.8 億條記錄/s。
美團的分享有兩個比較有趣的部分,一是提出了「增量生產」這個概念。這其實和莫問老師提到的全量增量一體化數據集成殊途同歸。但在這個概念裏,增長了數據時效性,數據質量和生產成本之間的權衡考量,也即如何在一個數倉業務中在知足時效性的狀況下能更有效的控制成本和提高數據質量。二是美團基於 Flink 架構解決了分佈式異構數據源同步(Datalink)的問題。他們基於 Flink 的同步系統能夠將同步任務經過 Task Manager 分散到集羣中,使得總體架構有很好的擴展性;另外一方面,離線和實時的同步任務能夠都統一到 Flink 框架中,因此離線和實時全部同步的組件均可以共用。
目前,美團在數據處理這一層尚未實現徹底的流批統一,因此鞠大升老師表示,將來的目標但願在數據處理以及數據存儲自己都能達到流批統一。
第三場議題由快手大數據架構團隊負責人趙健博老師帶來,主要分享了快手實時計算選型 Flink 的緣由和 Flink 在快手內部應用的場景,以及快手在這些應用場景內的相關技術改進。快手選型 Flink 的緣由其實回答了爲何 Flink 能成爲業界實時計算的標準:1)亞秒級的處理延遲,這對快手內部的實時應用是個硬性強需求;2)豐富的窗口計算模式,自帶的標準化狀態存儲以及 Exactly Once 的強一致性保證可以極大的簡化業務開發和調試的複雜度;3)流批一體架構的演進進一步簡化數據和業務架構的複雜性。快手錶示很是看好 Flink 流批一體在數據全場景落地。
快手使用 Flink 從 2017 年開始,從 0 到 1 今年已經是第四個年頭,發展過程如上圖所示。快手使用 Flink 主要場景包括實時 ETL 數據集成,實時報表,實時監控,實時特徵處理(AI),目前天天的峯值能夠達到 6 億條記錄 /s。針對上述每個場景快手都分享了很詳細的實例,特別是特徵處理(Feature Processing/Engineering),在不少 AI 場景中仍是頗有表明性的。
快手還分享了自研的狀態存儲(SlimBase)在其內部的應用。SlimBase 主要分爲三層,State Interface 層,KV Cache 層和 File System(Distributed)層;其中 KV Cache 是讀操做能加速的關鍵。當 SlimBase KV Cache 層都被命中時,SlimBase 相對於 RocksDB 有 3-9 倍的讀寫效率提高;而 Cache 層不能都被命中的狀況下(須要訪問文件系統),讀性能有一些降低。除了 SlimBase,快手對 Flink 的穩定性(包括硬件故障,依賴服務異常,任務過載)和負載均衡方面都提出一些改進的解決方案。分會場議題《快手基於 Apache Flink 的持續優化實踐》對此有更詳細的介紹。
對於將來的規劃,趙健博老師老師表示會推進 Flink 的流批一體在快手內部落地,並結合 Flink 的流批一體推進 AI 數據流實時化以提高訓練模型的迭代速度。隨着愈來愈多業務使用 Flink,快手對 Flink 的穩定性也提出更多的要求(好比快速 Failover 的能力),因此快手在這方面也會有更多的投入。
主議題的最後一場是由戴爾科技集團軟件開發總監滕昱老師帶來的流式存儲議題:Pravega。這個議題比較有趣的是討論了流式存儲的抽象 Stream Abstraction。傳統的文件系統對於流式存儲來講並非一個好的抽象,緣由 1)文件的大小有限制,可是流式數據是持續注入的;2)在持續的數據注入中對存儲的併發度也須要動態調整,這就涉及到多個文件的維護和操做;3)有序的流式數據的定位尋址問題在文件系統接口中也沒法很好的被支持;4)如今業界慣用的聯合使用消息隊列(Kafka)+ 文件系統的混合抽象也仍然沒有減輕應用程序開發和維護的難度。
根據上述需求,Dell 科技集團設計了基於 Stream Abstraction 的流式存儲系統 Pravega。Pravega 將流存儲動態 scaling,動態 scaling 之後如何保證流數據邏輯上有序,流數據定位和尋址以及 checkpointing 等等一系列問題都封裝在 Stream abstraction 之下。在這種抽象之下,流式存儲能夠和流式計算引擎無縫銜接,也給流式計算屏蔽了不少流存儲端的複雜性,從而使整個端到端僅一次性處理(exactly once)的 pipeline 被極大的簡化(如上圖所示)。目前 Pravega 已是一個 CNCF 開源項目,在 Pravega 最新一期官方 blog(https://blog.pravega.io/)中,Pravega 發佈了基於 OpenMessaging Benchmark 對比 Kafka 和 Pulsar 的各項性能指標。此外,Pravega 在分會場中有一場關於 Pravega Flink connector 的分享,《Pravega Flink connector 的過去,如今和將來》,感興趣的同窗能夠看一下。
除了主會場阿里巴巴,美團,快手,Dell 科技集團的分享,分會場由行業實踐,核心技術,開源生態,金融行業,機器學習和實時數倉六個子議題超過 40 家企業機構參與分享,包括天貓,字節跳動,亞馬遜,LinkedIn,愛奇藝,螞蟻,好將來,小米,微博,騰訊,知乎,京東,PingCAP,網易,360 等,後續會有更多的對分會場議題的專場分享文章,敬請期待!
沒有一個冬天不能逾越,沒有一個春天不會來臨。2020 年是不尋常的一年,雖然疫情肆虐,可是 Flink 社區在 2020 年持續繁榮,蟬聯最活躍的 Apache 項目;Flink 也成爲了事實上的國內外實時計算標準。過去一年,Flink 在流計算引擎內核,流批一體,AI融合,雲原生這四個方向上都取得了不錯的成績,將來也會在這四個方向上繼續耕進。2020 年是 Flink 的新紀元,流批一體首次在阿里巴巴雙十一最核心的業務場景中落地,這將是流批一體在業界大規模推廣的起點。將來可期,讓咱們攜手共進,一塊兒努力,把握好機遇共同迎接挑戰,共創美好的 Flink 2021!
[1] 40億條/秒!Flink流批一體在阿里雙11首次落地的背後
[2, vldb17] State Management in Apache Flink