摘要:2019云棲大會大數(shù)據(jù) & AI專場,阿里巴巴資深技術(shù)專家王峰帶來“Ververica Platform-阿里巴巴全新Flink企業(yè)版揭秘”的演講。本文主要從Ververica由來開始談起,著重講了Ververica Platform的四個核心插件App Manager、Libra Service、Stream Ledger、Gemini,以及阿里巴巴實時計算云原生版本相關(guān)特性及典型應(yīng)用場景。
以下是精彩視頻內(nèi)容整理:
隨著人工智能時代的降臨,數(shù)據(jù)量的爆發(fā),在典型的大數(shù)據(jù)業(yè)務(wù)場景下數(shù)據(jù)業(yè)務(wù)最通用的做法是:選用批處理的技術(shù)處理全量數(shù)據(jù),采用流式計算處理實時增量數(shù)據(jù)。2017年基于Flink開發(fā)的實時計算產(chǎn)品正式服務(wù)于阿里巴巴集團內(nèi)部,并從搜索和推薦兩大場景開始應(yīng)用。目前阿里巴巴及下屬所有子公司,都采用實時計算產(chǎn)品來處理所有的實時業(yè)務(wù)。
Ververica 是如何誕生的?
眾所周知,Apache Flink是業(yè)界非常流行的流計算引擎,最早誕生于歐洲,是柏林大學的研究型項目。后來由項目的發(fā)起人創(chuàng)辦了DataArtisans公司并根據(jù)該研究項目孵化出 Flink,并于2014年將 Flink 捐贈給 Apache基金會。
同年,阿里巴巴開始關(guān)注Flink。由于搜索有很多業(yè)務(wù)場景非常依賴大數(shù)據(jù)和實時數(shù)據(jù)處理,而Flink在架構(gòu)設(shè)計上,作為全流式的執(zhí)行引擎,數(shù)據(jù)處理效率非常高。于是阿里巴巴內(nèi)部開始著手研究Flink,并看好Flink將會成為新一代計算引擎,加速大數(shù)據(jù)計算的未來發(fā)展。
經(jīng)過一年努力,阿里內(nèi)部對Flink的開源版本做了很多深度優(yōu)化與改進,使其能夠適應(yīng)阿里巴巴超大規(guī)模的業(yè)務(wù)場景,包括搜索、推薦等核心的業(yè)務(wù)場景。2016年,第一次將Flink推到雙11場景使用,構(gòu)建了搜索、推薦的全實時鏈路(包括在線學習、模型預(yù)測等),形成了一套完整的閉環(huán)。2017年,阿里巴巴全線上線了基于Flink實時計算產(chǎn)品,服務(wù)于阿里巴巴的搜索、推薦等核心場景以及廣告、數(shù)據(jù)和所有部門的實時在線業(yè)務(wù),比如:阿里巴巴雙11全天各種多維的數(shù)據(jù)統(tǒng)計,交易額大屏幕的全球直播等全部都是由基于Flink的實時計算產(chǎn)品來支持。
在此基礎(chǔ)之上,2018年,我們首次在阿里云公有云推出基于Flink的實時計算服務(wù),開始支持各行各業(yè)的企業(yè)客戶。阿里巴巴對Flink的認可度在逐漸增加,F(xiàn)link也證明了在實時計算的業(yè)務(wù)中的巨大潛力。自此,阿里巴巴加大了對Flink的投入并加速推進Flink社區(qū)的發(fā)展。2019年1月,阿里巴巴收購了DataArtisans并創(chuàng)建了新企業(yè)品牌Ververica,以上即為Flink的企業(yè)品牌Ververica的由來。
在開源這塊,相信大家都非常了解每個大的開源項目背后都有一個企業(yè)品牌,隨著整合的逐步完善,德國的Flink創(chuàng)始團隊與中國阿里巴巴的實時計算團隊也開始密切合作。與此同時,我們也在持續(xù)推動Flink社區(qū)的發(fā)展。1月初,阿里巴巴將內(nèi)部維護的Flink分支Blink貢獻給整個Flink開源社區(qū),目前阿里巴巴對Flink社區(qū)貢獻的代碼已超過100萬行。并且,兩個團隊密切配合在商業(yè)化上進行聯(lián)合作戰(zhàn),推出全新的Flink企業(yè)版——Ververica Platform。
Ververica Platform的技術(shù)架構(gòu)如何,能夠解決哪些應(yīng)用場景,下面將詳細講解。
Ververica Platform 介紹
Ververica Platform是阿里巴巴推出的全新企業(yè)版,它仍然堅持以Apache Flink 的社區(qū)版本為內(nèi)核,同時能夠兼容各種企業(yè)級插件,在整個基于Flink的實時計算解決方案上對應(yīng)用性、穩(wěn)定性、性能、可運維性等方面提供企業(yè)級的增值服務(wù)。
首先,Ververica Platform是一個企業(yè)級的開放軟件,支持客戶將其部署在生產(chǎn)環(huán)境中,對接已有的周邊生態(tài)系統(tǒng)如日志、Metrics、存儲等。最初在設(shè)計Ververica Platform時就將其定位為完全云原生的方案,系統(tǒng)組件和核心組件都以支持微服務(wù)方式部署到Kubernetes上,用戶可以非常方便的將Ververica Platform和自己的在線服務(wù)或其他數(shù)據(jù)服務(wù)做云原生的混布。
Ververica Platform 計算引擎
Ververica Platform使用Apache Flink作為其核心的計算引擎,保證和社區(qū)的完全兼容。上圖為Apache Flink最新演進的架構(gòu)圖。Apache Flink的本質(zhì)是一款有狀態(tài)的流式計算引擎,可以連接各種各樣的存儲,通過ETL計算、數(shù)據(jù)分析等將數(shù)據(jù)結(jié)果導入到另外的存儲中。作為流式計算,F(xiàn)link的時效性非常好,可以在高吞吐量的同時達到亞秒級延時。Flink不僅能夠連接消息隊列等無限數(shù)據(jù)流的數(shù)據(jù)源,也可以連接文件系統(tǒng)、數(shù)據(jù)庫表、KV存儲等有限的數(shù)據(jù)集,所以Flink也在基于流式計算的優(yōu)勢上逐漸朝著批流融合的方向發(fā)展,有希望成為一種新的批流合一的全能計算引擎。
所以Ververica Platform將會依賴社區(qū)的力量,采用Flink社區(qū)的主流版本作為內(nèi)核,所有的增值服務(wù)、各種優(yōu)化都會通過嵌入的方式來實現(xiàn),為用戶提供一個開放透明的計算引擎。以下將詳細介紹Ververica Platform的核心插件。
Ververica Platform – App Manager
Ververica Platform在應(yīng)用上的企業(yè)級插件叫APP Manager,是管理Flink全生命周期的工具。Flink作為計算引擎,在易用性方面可以采用多種優(yōu)化來幫助用戶更高效地使用Flink系統(tǒng)。比如,整個Job生命周期的管理,從Job的開發(fā)、配置,到提交上線、停止重啟等基本的運維功能可以通過APP Manager封裝出一套完整的工具鏈來完成,同時提供包括日志的采集收集、運行Metrics的收集展現(xiàn)等功能,方便用戶對任務(wù)進行debug。此外,企業(yè)級安全也是非常重要的feature,尤其是企業(yè)應(yīng)用時存在多租戶部署的需求,因此APP Manager也提供了Rollbase權(quán)限管理、OpenID授權(quán)系統(tǒng)。同時,我們非常注重開放性和被集成的能力,所以APP Manager還提供了完善的API,使用戶能非常方便的將Ververica Platform企業(yè)級軟件集成到自己已有的大數(shù)據(jù)平臺之中。
Ververica Platform – Libra Service
Libra Service是提供智能運維能力的企業(yè)級插件。大數(shù)據(jù)的系統(tǒng)運行中運維是其中的重要部分,尤其是規(guī)模擴大的場景中。常規(guī)情況下運行Flink Job,基本上是開發(fā)人員寫完代碼后要配各種各樣的參數(shù),對于Flink的運維人員來講,需要知道這個Job是干什么的、支持什么樣的業(yè)務(wù)、峰值是什么情況、大概的數(shù)據(jù)規(guī)模是什么樣子,根據(jù)自己的經(jīng)驗進行調(diào)整,并且經(jīng)過多次迭代后才能夠?qū)⒁粋€任務(wù)調(diào)好。在任務(wù)較少的情況下,還可以通過運維人員人肉維護,但如果出現(xiàn)上千個Job,甚至阿里巴巴內(nèi)部上萬個Flink Job的場景,這是Flink社區(qū)版本無法幫助解決的,所以Ververica Platform提供了一套智能運維插件,類似于AI Ops,智能運維插件能夠幫助用戶推算出一個Job需要多少個TMs,每個TM需要配置多少個Slots,每個TM的JVM參數(shù)如何配置以及一個Job的并發(fā)度如何配置等。
上圖為Libra Service的基本設(shè)計思路,這是一個非常經(jīng)典的智能AI Ops設(shè)計方案,可以看到用戶正常通過APP Manager會提交一個Job,Job在Kubernetes集群啟動之后,Libra Service會監(jiān)控所有在Kubernetes集群上面運行的Flink Job,實時采集所有的Metrics,包括Task的Metrics是否延遲、吞吐、buffer等運行信息,Job Manager和Task Manager的GC情況,JVM各種運行的數(shù)據(jù)指標等等。相當于自動采集作業(yè)的各種指標特征,利用算法推算出現(xiàn)在的Job運行是否健康。比如部分Job在持續(xù)地延遲運行或利用了大量資源但其實是在空跑等不健康狀態(tài),當Job處于不健康狀態(tài)時,通過算法推算出合理的計劃,比如延遲了要擴容,浪費資源可能要縮容,然后通知App Manager去修改整個Job的配置,讓Job重啟適應(yīng)新的配置來達到穩(wěn)定高效節(jié)省資源的效果,這就是彈性擴縮容插件Libra Service,是智能運維的AI Ops。
Ververica Platform – Stream Ledger
Flink提供了非常完整的一致性語義,也支持強一致性的語義,保證數(shù)據(jù)一條不丟、一條不少,這個是可以支持計費等金融級非??量痰臈l件,但有一個約束即整個正確性只能夠保證單條的記錄,比如2個賬戶要轉(zhuǎn)賬就保證不了,因為只能夠保證對A的操作絕對正確,對B的操作絕對正確,但是對A的10塊錢轉(zhuǎn)給B,這個完整的事務(wù)原生的Flink是沒有辦法保證的。
因此Ververica Platform提供了一套分布式的跨行跨機器事務(wù)解決方案。Stream Ledger是基于Flink Datastream API生態(tài)的Library,可以實現(xiàn)高性能的跨行分布式事務(wù)處理能力,這套Library完全基于Flink內(nèi)部API,沒有任何外部依賴,可以與Datastream API和SQL無縫集成,能夠兼容Flink已有的所有讀寫Connectors,所以Steam Ledger是一個輕量的分布式事務(wù)處理方案,也是為金融級場景提供的分布式事務(wù)處理能力的解決方案。
Ververica Platform – Gemini
最后一個插件是狀態(tài)存儲插件。在流式計算中,F(xiàn)link天然支持內(nèi)置狀態(tài)存儲管理,不需要依賴外部的存儲就可以把實時的數(shù)據(jù)統(tǒng)計等工作完成。正常做報表統(tǒng)計時都有count、sum、average等參數(shù),這些計數(shù)器就是狀態(tài)數(shù)據(jù),隨著計算量的增加,狀態(tài)數(shù)據(jù)可能會越來越大以至于內(nèi)存可能無法承擔,所以需要一套內(nèi)置的狀態(tài)存儲來存儲這些狀態(tài)。大家都知道在計算系統(tǒng)中,一旦有存儲IO訪問,性能瓶頸則很有可能是在存儲IO上,所以需要優(yōu)化狀態(tài)存儲的訪問。
Flink內(nèi)置了兩種狀態(tài)存儲,一種是基于Java Heap的State Backend狀態(tài)存儲插件,另一種是基于RocksDB的狀態(tài)存儲插件?;贘ava Heap的性能非常好,因為是完全基于JVM內(nèi)存的,并且沒有序列化反序列化。但它的局限在于Java的方案內(nèi)存容量會是瓶頸,因為Java對內(nèi)存的利用率非常低,不如序列化高。經(jīng)過測試,在物理數(shù)據(jù)超過幾百兆之后,內(nèi)存的使用率超過幾個G就不能夠擴大數(shù)據(jù)量了,所以系統(tǒng)非常不穩(wěn)定。業(yè)界很多公司都是在用RocksDB來做,這是非常優(yōu)秀的開源KV存儲,但因為是基于C++寫的,所以和Flink的集成上還有很多不方便的地方,同時RocksDB也不是為Flink設(shè)計的,所以Flink在很多狀態(tài)的數(shù)據(jù)結(jié)構(gòu)設(shè)計上沒有辦法進行優(yōu)化。我們希望針對Flink的狀態(tài)存儲來做一套自己的存儲插件,可以提供更強大的功能,同時也兼容社區(qū)的協(xié)議,所以Gemini應(yīng)運而生。Gemini是完全存儲計算分離的設(shè)計,它和RocksDB有很大的不同,同時它也可以利用本地SSD做二級緩存來加速訪問,尤其是在Flink出現(xiàn)故障,一個Task失敗,重新拉起一個進程時,它可以遠程的從HDFS上直接拉起狀態(tài),下載時間會大幅降低,提升了整個Flink SLB體驗,包括它在設(shè)計的時候采用了Java,和Flink系統(tǒng)間的整合也會更好。
這是整個Ververica Platform Gemini Store和RocksDB的Benchmark的性能數(shù)據(jù),我們可以看到Flink在常用的KV state、List state、Map state等性能上都有非常明顯的提升,具體的數(shù)據(jù)大家可以自行查看。這個項目也是我們在整個Ververica Platform做性能優(yōu)化中效果最明顯的插件。
阿里巴巴實時計算云原生版本
Ververica Platform是企業(yè)級的引擎軟件,能夠部署到任何環(huán)境中,天然可以跑在Kubernetes上,所以為了方便提供實時計算的云計算服務(wù),讓阿里云的客戶都能夠方便的使用,我們已經(jīng)把它適配到阿里云的云環(huán)境之中,和阿里云的系統(tǒng)實現(xiàn)了無縫的集成。將Flink的log放到阿里云的SLS上,可以利用SLS的log技術(shù)查詢搜索Flink的log,所以我們將Flink Metrics對接到Prometheus生態(tài)中。我們也將Flink Checkpoint存儲的狀態(tài)數(shù)據(jù)對接到阿里云的OSS上,讓已有的用戶能夠復(fù)用OSS系統(tǒng)。更重要的一點是整個阿里系統(tǒng)都是云原生的,Ververica Platform也完全運行在阿里云的容器服務(wù)平臺之上,因此云原生也是Ververica Platform的特點之一。如果用戶已經(jīng)有自己的云原生集群或容器服務(wù),可以嘗試半托管模式,用戶將提供集群給我們,我們就可以把整個軟件部署到用戶的集群上,包括已經(jīng)存在的集群或新購買的集群,這種半托管方式能夠給用戶提供到此種服務(wù),當然我們也會提供全托管模式,選擇上比較靈活,這就是目前已經(jīng)在公測的Ververica Platform云原生企業(yè)版。
Ververica Platform產(chǎn)品能夠應(yīng)用于哪些場景,幫助用戶解決哪些問題想必是大家非常關(guān)心的,以下將詳述。
應(yīng)用場景1 - 實時數(shù)倉
第一個場景是實時數(shù)倉,這也是在阿里巴巴內(nèi)部用得最多的場景,在云上抽象為如圖的模型,用戶的數(shù)據(jù)來自于兩處甚至是三處,第一部分來自于ECS日志,第二部分來自于RDS結(jié)構(gòu)化數(shù)據(jù),第三部分來自于IOT的設(shè)備。通過阿里云的SLS服務(wù)或者DataHub數(shù)據(jù)收集通道來收集用戶數(shù)據(jù),實時計算的產(chǎn)品可以實時訂閱到上述數(shù)據(jù),用Flink SQL對以上數(shù)據(jù)進行多維數(shù)據(jù)分析,產(chǎn)生實時的數(shù)據(jù)報表。這個過程中,除了有單流的數(shù)據(jù)處理還有多流數(shù)據(jù)的join,還可能和HBase、Redis、MySQL等數(shù)據(jù)庫的數(shù)據(jù)有結(jié)合,其中可以運行復(fù)雜的SQL做經(jīng)典數(shù)倉的處理,把數(shù)倉處理的結(jié)果實時寫到在線的數(shù)據(jù)庫比如HBase中,都是比較常用的用法。然后通過在線的數(shù)據(jù)服務(wù)在大屏幕中展現(xiàn),這個場景在淘寶內(nèi)部是非常經(jīng)典的場景,雙11的時候可以看到大屏幕上有各種數(shù)據(jù)的成交、統(tǒng)計、分布、排名等,最典型的就是GMA交易數(shù)據(jù),比如今年1000多億,明年2000多億等等,數(shù)字是實時滾動、全球直播的,也是通過這套Flink的架構(gòu)來實現(xiàn)的?,F(xiàn)在對于云上的很多客戶而言,實時數(shù)倉也是一個很大的應(yīng)用場景。
應(yīng)用場景2 - 實時風控
第二個實時場景就是實時監(jiān)控、異常數(shù)據(jù)的報警等等。這也是現(xiàn)在非常主流的場景之一,其實數(shù)據(jù)源和實時數(shù)倉很像,基本上還是基于ECS的日志數(shù)據(jù)或數(shù)據(jù)庫中的增量數(shù)據(jù)表的更新數(shù)據(jù)、IOT的數(shù)據(jù)等,工業(yè)會產(chǎn)生大量的數(shù)據(jù),需要監(jiān)測設(shè)備數(shù)據(jù)的異常。與實時數(shù)倉不同之處在于實時風控并不是采用SQL來做統(tǒng)計和分析,基本上會采用復(fù)雜時間處理,比如Flink CEP或業(yè)務(wù)方自己定制的風控庫來對實時數(shù)據(jù)進行監(jiān)測,這個監(jiān)測可能基于業(yè)務(wù)的規(guī)則,也可能基于Bigdata on AI的方案。新的研究方向是在異常監(jiān)測或者風控領(lǐng)域基于模型監(jiān)控,離線或?qū)崟r訓練并在線加載這些模型進行實時檢測,能夠?qū)崟r發(fā)現(xiàn)異常的事件,及時進行補救。通過Kafka集群到在線的報警系統(tǒng)來對接各種業(yè)務(wù)系統(tǒng)去報警,這也是能夠秒級實時監(jiān)測各種異常事件做風險控制的方式之一,在整個安防場景、金融場景都是非常常見的解決方案。
應(yīng)用場景3 - 在線機器學習
第三個場景是成長最快的在線機器學習。在線機器學習是阿里多年的研究方向之一,也是Flink首先應(yīng)用在阿里巴巴搜索事業(yè)部搜索推薦業(yè)務(wù)部場景的原因。在線機器學習是搜索推薦廣告中非常火的方向,機器學習不僅是離線數(shù)據(jù)模型來做訓練,甚至能夠形成一個完全的實時化閉環(huán)方案,通過用戶在天貓、淘寶上產(chǎn)生的大量的點擊、交易,相關(guān)數(shù)據(jù)都會通過日志系統(tǒng)實時收集,之后傳入實時計算中計算,我們稱之為特征工程。對用戶的數(shù)據(jù)如用戶的訂單等做數(shù)據(jù)清洗,數(shù)據(jù)特征的彌補、計算,甚至和離線特征做一些結(jié)合。部分數(shù)據(jù),如30天銷量、用戶年齡等數(shù)據(jù)并非實時變化,是需要長時間的統(tǒng)計得到,我們把實時特征、離線特征全部都做了拼接之后就是多維數(shù)據(jù)的join,最終能夠得出實時樣本。我們通過流式得到實時樣本之后就能夠在后面對接流式來做機器學習的訓練,可以通過PAI等類似的機器學習產(chǎn)品來做實時或者準實時的模型訓練,訓練完之后產(chǎn)生的模型有一套完整的驗證機制,驗證完整的模型Validation之后才能推上線,再用新模型提供個性化的搜索和推薦,從而驅(qū)動用戶產(chǎn)生新的點擊,再去進行模型的更新,進而形成一套完整的閉環(huán)。這是Bigdata+AI的一個典型場景,從數(shù)據(jù)處理、數(shù)據(jù)訓練,再到數(shù)據(jù)預(yù)測、用戶點擊形成反饋等,形成完整生產(chǎn)線。這也是Flink做實時計算和在線的流式計算與在線機器學習的訓練形成一套完整閉環(huán)的經(jīng)典方案,這套方案也是淘寶天貓真實的在線搜索推薦解決方案。
目前我們有很多客戶都在采用這種新的方案來提升他們的點擊,尤其是社交媒體類的公司都在嘗試這個新的解決方案。
最后,回到社區(qū),阿里巴巴收購?fù)闐ataArtisans之后成立了新的企業(yè)品牌Ververica,我們希望除了商業(yè)化品牌的統(tǒng)一、提供的增值服務(wù)之外,還希望能夠繼續(xù)擴大社區(qū)規(guī)模,服務(wù)好更多社區(qū)的用戶,推動社區(qū)繁榮發(fā)展。所以阿里巴巴也投入了很大的精力來支持整個 Flink 社區(qū)的發(fā)展,尤其是在中國,我們已經(jīng)在北京、上海、深圳等連續(xù)辦了非常多的Flnik社區(qū)Meetup,包括去年年底舉辦的首屆Flink Forward China大會,今年將繼續(xù)舉辦第二屆。去年大會的規(guī)模是1000人,今年希望能夠達到2000人,希望中國比較主流的互聯(lián)網(wǎng)公司都能參與其中,分享他們對Flink應(yīng)用的經(jīng)驗,我們也會聯(lián)合Flink創(chuàng)始團隊一起,講Flink的新特性、發(fā)布以及方向上的展示。歡迎更多對Flink有興趣的同學一起來參與大會,交流探討。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評論