Flink万字干货:4大发展方向,美团、快手应用实践(PDF下载)
作者:王峰(莫問)、梅源
來源:Flink 中文社區(ID:gh_5efd76d10a8d)
剩喜漫天飛玉蝶,不嫌幽谷阻黃鶯。2020 年是不尋常的一年,Flink 也在這一年迎來了新紀元。
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 感興趣的同學有所助益。?
在業界影響力方面,經過幾年的發展,Flink 已經成為事實上的國內外實時計算行業標準,大部分主流科技公司均已采用 Flink 作為實時計算的技術方案。本屆 Flink Forward Asia 邀請到 40 多家一線國內外公司參與分享 Flink 的技術探索和實踐經驗,上圖列出了其中部分公司的 Logo。
從圖中的 Logo 來看,Flink 技術已經應用到各行各業,深入到我們的日常點滴生活中,從知識分享到在線教育;從金融服務到理財投資;從長短視頻到在線直播;從實時推薦搜索到電商服務等等。
從 Flink 引擎生態來看,2020 年,Flink 在流計算引擎內核,流批一體,擁抱 AI,云原生這四個主打方向上都取得了不錯的成績。
特別對于流批一體,今年發布的三個大版本(Flink-1.10 & 1.11 & 1.12)對流批一體進一步作了升級和完善,并首次在阿里巴巴雙十一最核心的天貓營銷活動分析大屏場景中落地 [1]。經歷過雙十一洗禮的流批一體將成為在業界大規模推廣的起點,開創流批一體新紀元!
本文將對 Keynote 議題作一些簡單的歸納總結,拋磚引玉,感興趣的小伙伴們可以在官網找到相關主題視頻觀看直播回放。?
01 主會場議題
在主議題之前有兩個環節值得提一提。一是阿里巴巴集團副總裁,阿里云智能計算平臺負責人,人工智能計算框架 Caffe 之父賈揚清老師作為開場嘉賓,分享了他對開源與云的思考。
他指出,開源讓云更標準化,而大數據和人工智能一體化則是必然趨勢。顯而易見地,作為頂級開源項目和實時計算標準的 Flink 在這個過程中承擔極其重要的角色。同時他也對 Flink 如何在未來做到計算普惠化和數據智能化提出更多期待,讓 Flink 的小松果在各行各業的數據和智能融合中生根發芽!
二是由阿里云天池平臺和 Intel 聯合舉辦的第二屆 Apache Flink 極客挑戰賽頒獎典禮。此次挑戰賽聚焦防疫主題,在 Apache Flink 平臺上支持深度學習應用,吸引了來自 14 個國家和地區,705 所高校,1327 家企業的 3840 位選手,由揚清,李文和湘雯頒獎。
言歸正傳,下面聊聊幾個主議題。?
02 Flink as a Unified Engine?–– Now and Next
主議題由 Apache Flink 中文社區發起人,阿里云智能實時計算和開放平臺負責人莫問老師開啟,主要介紹 Flink 社區在 2020 年取得的成果以及未來的發展方向,主要包括:流計算引擎內核,流批一體,Flink + AI 融合,云原生這四個方向。
值得一題的是,他還特別分享了阿里巴巴作為 Flink 最大的使用者和推動者,在流批一體雙十一核心業務場景落地的過程中的經驗和心得,相信對很多有類似需求的小伙伴們會有啟示。
技術創新是開源項目持續發展的核心,所以首先第一個部分是 Flink 社區在流計算引擎內核方面的創新分享:
1)Unaligned Checkpoint
我們知道 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 自動智能的切換,下圖給出了示意圖。?
2)Approximate Failover –– 更加靈活的容錯模式
流計算內核引擎部分的另一個提升是 Approximate 單點 Failover。在強一致性 exactly once 語義下,單個節點的失敗會導致全部節點的重新啟動和回滾。
但對某些場景,特別是 AI 訓練的場景,其實對語義一致性的要求并沒有那么高,反而對于可用性要求更高,所以社區引入了 Approximate Failover 的模式:單個節點的失敗只會引起該失敗節點的重啟和恢復,而整個數據流程是沒有中斷的。Approximate Failover 在 AI 訓練和推薦場景下是強需求,快手和字節跳動的分享中都有提到。
3)Nexmark –– Streaming Benchmark
目前的實時流計算并沒有行業內公認的 benchmark,為了填補這項空白,基于 NEXMark[3],Flink 推出了第一版包含 16 個 SQL Query 的 benchmark 工具? Nexmark。
Nexmark 一大特點是方便易用,沒有外部系統依賴, 同時支持標準的? ANSI SQL。Nexmark 目前業已開源,可以用來比對不同流計算引擎之間的差異。
https://github.com/nexmark/nexmark
第二個重要的部分是流批一體,開頭提到 2020 年是流批一體的新紀元,為什么這么說呢,莫問老師從流批一體架構演進,Flink 批處理性能,以及業界流批一體數據生態這三個方面給出了答案。
1)流批一體架構演進
Flink-1.10 & 1.11 兩個大版本實現了 SQL & Table 層的流批一體化和解決生產可用性問題;剛剛發版的 Flink-1.12 解決了 DataStream 層的流批一體化;從 1.13 版本開始,Flink 將逐步淘汰 DataSet 這套 API。在全新的流批一體架構中,Flink 完成了統一的流批表達,統一的流批執行,以及統一可插拔的 runtime 支持。
分會場中的《基于 Flink DataStream API 的流批一體處理》有對這個部分更為詳細的介紹。?
2)Batch 性能
大家比較關心的批的性能:經過三個版本的迭代,以 TPC-DS 為基準,Flink-1.12 比 Flink-1.9(去年的版本)提速 3 倍!數據量 10TB,20臺 64Core 機器的配置下,TPC-DS 運行時間收斂到萬秒以內。這意味著 Flink Batch 的性能已經不亞于任何一個業界主流的 Batch 引擎了。
3)流批一體數據生態
莫問老師指出,流批一體不僅僅只是一個技術問題,它也對業界數據生態的演化也起到了深遠的作用,比較典型的場景包括數據同步集成(數據庫里的數據同步到數倉中)和基于 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 (基于 Flink 的流批一體的傳統機器學習算法庫)新增了數十個開源算法,提供基于參數服務器的大規模分布式訓練,訓練過程與預測服務的銜接更加順暢。?
https://github.com/alibaba/alink
大數據與 AI 一體化流程管理也是一個很值得深入探討的問題,其背后的本質問題是在離線學習實時化的大背景下,如何設計離線在線機器學習一體化的流程管理架構,以及該架構如何與大數據工作流程相結合,實現大數據與機器學習全鏈路一體化的問題。
這套完整的解決方案 Flink AI Extended 不僅支持深度學習引擎和 Flink 計算引擎的集成(TensorFlow / PyTorch on Flink),它的工作流(Flink AI Flow)也應用了上述的一體化設計思想。
目前 Flink AI Extended 也已經開源:
https://github.com/alibaba/flink-ai-extended
此外,在分會場議題中有對 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 流批一體的落地。
03 Flink 助力美團數倉增量生產?
第二場議題由美團實時計算負責人鞠大升老師帶來,主要分享了 Flink 在美團內部的應用。鞠大升老師首先分享了美團數倉的整體架構。如下圖所示。美團數據架構包括數據集成系統、數據處理系統、數據消費和數據應用四部分。
Flink 主要應用在? Kafka2Hive、實時數據處理、Datalink 等(圖中紅圈的部分),而他本次分享也主要集中在這幾個部分。
Flink 在美團的主要應用場景包括實時數倉,實時分析;推薦搜索;風控監控;安全審計。這幾個應用場景其實也是 Flink 現在的幾個最主流的應用場景。在美團的應用場景中,Flink 每天的峰值數據達到 1.8 億條記錄/s。
美團的分享有兩個比較有趣的部分,一是提出了“增量生產”這個概念。這其實和莫問老師提到的全量增量一體化數據集成異曲同工。但在這個概念里,增加了數據時效性,數據質量和生產成本之間的權衡考量,也即如何在一個數倉業務中在滿足時效性的情況下能更有效的控制成本和提升數據質量。
二是美團基于 Flink 架構解決了分布式異構數據源同步(Datalink)的問題。他們基于 Flink 的同步系統可以將同步任務通過 Task Manager 分散到集群中,使得整體架構有很好的擴展性;另一方面,離線和實時的同步任務可以都統一到 Flink 框架中,所以離線和實時所有同步的組件都可以共用。
目前,美團在數據處理這一層還沒有實現完全的流批統一,所以鞠大升老師表示,未來的目標希望在數據處理以及數據存儲本身都能達到流批統一。?
04 Apache Flink?在快手的過去、現在和未來?
第三場議題由快手大數據架構團隊負責人趙健博老師帶來,主要分享了快手實時計算選型 Flink 的原因和 Flink 在快手內部應用的場景,以及快手在這些應用場景內的相關技術改進。快手選型 Flink 的原因其實回答了為什么 Flink 能成為業界實時計算的標準:
亞秒級的處理延遲,這對快手內部的實時應用是個硬性強需求;
豐富的窗口計算模式,自帶的標準化狀態存儲以及 Exactly Once 的強一致性保證能夠極大的簡化業務開發和調試的復雜度;
流批一體架構的演進進一步簡化數據和業務架構的復雜性。快手表示非常看好 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 的能力),所以快手在這方面也會有更多的投入。?
05 Stream is the New File?
主議題的最后一場是由戴爾科技集團軟件開發總監滕昱老師帶來的流式存儲議題:Pravega。這個議題比較有趣的是討論了流式存儲的抽象 Stream Abstraction。傳統的文件系統對于流式存儲來說并不是一個好的抽象,原因:
文件的大小有限制,但是流式數據是持續注入的;
在持續的數據注入中對存儲的并發度也需要動態調整,這就涉及到多個文件的維護和操作;
有序的流式數據的定位尋址問題在文件系統接口中也無法很好的被支持;
現在業界慣用的聯合使用消息隊列(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]
{https://pdfs.semanticscholar.org/6fa0/917417d3c213b0e130ae01b7b440b1868dde.pdf}
[3] [NEXMark – A Benchmark for Queries over Data]?
{http://datalab.cs.pdx.edu/niagara/pstream/nexmark.pdf}
▼ 活動推薦?▼
12 月 13 日 -12 月 15 日,大數據領域頂級盛會 Flink Forward Asia 2020 圓滿落幕!六大專場解讀 Flink 流批一體生產環境落地實踐、Flink 核心技術、實時數倉應用、開源生態發展、機器學習及金融行業應用等,點擊下方【閱讀原文】,下載嘉賓分享 PDF 并觀看直播回放~?????
戳我,下載嘉賓分享 PDF!
總結
以上是生活随笔為你收集整理的Flink万字干货:4大发展方向,美团、快手应用实践(PDF下载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 压力、焦虑远远超出全国平均值,近4成程序
- 下一篇: 大数据、云计算、AI大牛都在这里了,就等