天天看點

Apache Flink,流計算?不僅僅是流計算!

作者:王峰(花名:莫問)

2018年12月下旬,由阿裡巴巴集團主辦的Flink Forward China在北京國家會議中心舉行。Flink Forward是由Apache軟體基金會授權的全球範圍内的Flink技術大會,2015年開始在德國柏林舉辦,今年第一次進入中國。

今天,計算平台事業部的資深技術專家莫問,将帶領我們重溫這場大資料技術的饕餮盛宴,感受Apache Flink 作為下一代大資料計算引擎的繁榮生态。

Apache Flink,流計算?不僅僅是流計算!

Flink Forward China 大會邀請到了來自阿裡巴巴、騰訊、華為、滴滴、美團點評、位元組跳動、愛奇藝、去哪兒、Uber、DellEMC、DA(Flink 創始公司)等國内外知名企業以及Apache軟體基金會的嘉賓為大家分享了Apache Flink的成長曆程、應用場景和發展趨勢。

Flink Forward China 2018 嘉賓PPT及演講視訊:

https://github.com/flink-china/flink-forward-china-2018

參與有道,如何更“好”地貢獻 Apache 項目

上午大會由Apache軟體基金會的秘書長Craig Russell開場,Craig首先分享了Apache開源之道,以及開源社群的精神和體制,然後以Apache Flink項目的成長經曆為背景,向大家介紹了如何建立以及管理一個Apache開源項目,如何為Apache開源項目做貢獻,并跟随開源項目一起成長和收獲。

Apache Flink,流計算?不僅僅是流計算!

通過Craig的分享,我們也更詳細地了解到了Apache Flink的發展經曆。Flink早期起源于德國柏林工業大學的一個研究項目Stratosphere,并于2014年4月捐獻給Apache軟體基金會,同時重新定位品牌為Flink,經過8個月孵化期,在2014年12月成功從Apache軟體基金會畢業,成為Apache頂級項目,從此開始在大資料領域航行。經過最近4年的持續快速發展,Apache Flink社群已經培養出了42名Committer和19名PMC Member,不斷加入的新鮮血液為Apache Flink社群持續貢獻代碼,并推動社群健康快速的發展。

Apache Flink,流計算?不僅僅是流計算!

雲上計算普惠科技

Apache Flink,流計算?不僅僅是流計算!

在Craig分享後,阿裡巴巴集團副總裁、搜尋事業部與計算平台事業部負責人周靖人進行了主題演講。靖人首先向大家介紹了阿裡巴巴大資料雲上計算的現狀和趨勢,讓大家看到了阿裡巴巴大資料業務場景的超大規模,以及未來更大的挑戰。

Apache Flink,流計算?不僅僅是流計算!

為了更好地支援阿裡巴巴未來大資料的發展,阿裡大資料發展政策一方面要進一步提升計算力和智能化,增強企業級服務能力。同時也要加強技術的生态化建設,大力支援并推動開源技術社群的發展,相容行業生态标準,發展生态夥伴聯盟,推動生态建設。

Apache Flink,流計算?不僅僅是流計算!

目前阿裡巴巴已經參與貢獻230+開源項目,具備8000+合作夥伴和2000+ ISV,雲上生态也已經突破1000,000開發人員。在大資料領域,阿裡巴巴最近幾年對Apache Flink社群進行了持續大力的投入,貢獻超過15w行代碼,主導建立了Flink China中文社群,加速Flink在國内的生态建設,并于今年開始在北京、杭州、上海、深圳等地多次組織Flink Meetup,促進國内Flink技術人員更友善的分享交流。

Apache Flink,流計算?不僅僅是流計算!

靖人在分享的最後宣布了阿裡巴巴内部Flink版本(Blink)将于2019年1月正式開源,本次開源内部版本的目标主要是希望讓廣大Flink使用者能提前享受到阿裡巴巴對Flink的改進和貢獻。阿裡巴巴同時會盡快将Blink中對Flink的各項改進和優化貢獻給Flink社群,堅持對Apache Flink一個社群的擁抱和支援。

Apache Flink,流計算?不僅僅是流計算!

Apache Flink,如何重新定義計算?

在靖人宣布阿裡巴巴開源内部Flink版本(Blink)後,阿裡巴巴集團研究員蔣曉偉分享了Apache Flink在阿裡巴巴内部的成長路線以及技術演進之路。

阿裡巴巴從2015年開始調研Flink,并于2016年第一次在搜尋場景中上線Flink,在經過搜尋大資料場景的檢驗後,2017年Flink開始在阿裡巴巴集團範圍内支援各項實時計算業務, 到目前為止阿裡巴巴基于Flink打造的實時計算平台,已經支援了包括淘寶、天貓、支付寶、高德、飛豬、優酷、菜鳥、餓了麼等所有阿裡巴巴集團下的所有子公司的資料業務,并通過阿裡雲向中小企業提供一站式實時計算服務。在2018年的雙11中,阿裡實時計算平台已經實作了峰值每秒17億次,當天萬億級的消息處理能力。

Apache Flink,流計算?不僅僅是流計算!

Apache Flink目前在阿裡巴巴内部最典型的業務場景是實時BI,阿裡巴巴内部有着海量的線上交易以及使用者資料,實時看到各個次元的資料統計可以及時地感覺并指導阿裡巴巴的營運。下圖是一個典型的阿裡實時BI流程,阿裡的線上服務系統和資料庫會實時産生大量日志資料并進入消息隊列,FlinkJob會從消息隊列中實時讀取處理這些資料,然後将各種統計分析結果實時更新到KV/Table存儲系統中,例如:HBase,終端使用者可以通過Dashboard實時看到各種次元的資料統計分析結果。

Apache Flink,流計算?不僅僅是流計算!

在雙11當天,各種次元的實時資料報表是指導雙11決策的依據,其中最為關鍵的就是全球直播的實時GMV成交額。Flink已經連續兩年支援阿裡巴巴雙11實時GMV大屏,一個看似簡單的數字,其背後實際上需要大量Flink計算任務平穩、精準地運作支撐。

Apache Flink,流計算?不僅僅是流計算!

Flink在阿裡巴巴另一個典型的應用場景是線上機器學習,傳統的離線機器學習方法需要T+1的分析使用者曆史行為,訓練出模型,當第二天模型上線後就已經是過去式,使用者目前的需求和預期可能已經完全改變。為了給使用者更好的購物消費體驗,阿裡巴巴的機器學習系統早已經進化到線上學習時代,例如:當一個使用者在搜尋完一個Query,浏覽結果頁時,或者點選檢視部分商品時,阿裡巴巴的線上學習系統已經可以利用這個間隙了解到這個使用者當時的意圖和偏好,并在下次使用者Query時給出更好的排序,并向使用者推薦更合适的商品,這種方式不僅可以進一步提升業務效率,同時也能為使用者帶來更好的産品體驗,尤其是在雙11這種大促場景,使用者的行為時效性都是很短的,隻有通過實時線上學習方式,才能做出更加精确的個性化預測和推薦。

線上學習系統的優勢在于可以實時收集并處理使用者的行為資料,進而進行實時流式的特征計算和線上訓練,并将模型的增量更新實時同步回線上系統,形成資料閉環,通過不斷疊代自動優化系統效率和使用者體驗。在阿裡的業務規模下,整個線上學習流程将會面對海量的使用者資料規模、和極其複雜的計算挑戰,但在Flink的驅動下,整個流程可以在秒級完成。

Apache Flink,流計算?不僅僅是流計算!

通過以上兩種經典場景可以看出阿裡巴巴實時業務場景在各方面的挑戰都很大,直接将Flink社群版本在阿裡上線使用是不現實的,是以阿裡巴巴實時計算團隊這兩年也對Flink進行了全面的優化、改進和功能擴充,其中有些功能和改進已經推回到了Flink社群。

在Flink Runtime領域,阿裡巴巴貢獻了:

全新的分布式系統架構:一方面對Flink的Job排程和資源管理進行了解耦,使得Flink可以原生運作在YARN,K8S之上;另一方面将Flink的Job排程從集中式轉為了分布式,使得Flink叢集規模可以更大的擴充。

完善的容錯機制:Flink預設在任何task和master失敗後,都會整個Job 重新開機,阿裡巴巴提出的region-based failover政策以及job manager failover/ha機制,讓Flink可以運作地更加可靠穩定;

大量的性能優化:Flink早期隻提供全量Checkpoint機制,這在阿裡巴巴大規模State場景下無法正常運作,阿裡巴巴提出了增量Checkpoint機制,讓Flink即使在TB級State場景下也可以高效運作;Flink Job經常在内部算子或者UDF中通路外部存儲系統,例如:mysql,hbase,redis等,一旦出現個别query被卡住,整個task就被卡住,并通過反壓影響到整個job,阿裡巴巴提出了async IO機制,大幅降低了同步IO通路帶來的影響。 此外,阿裡巴巴貢獻了credit-based的全新網絡流控機制,使得Flink網絡資料傳輸性能得到了顯著提升。

在Flink SQL領域,阿裡巴巴貢獻了全新的Streaming SQL語義和功能。例如:Agg Retraction,UDX支援,DDL支援和大量的Connector适配。

Apache Flink,流計算?不僅僅是流計算!

在阿裡巴巴,我們發現很多經典的業務場景都是同時具備實時流處理和離線批處理兩種需求,而且流處理和批進行中的業務邏輯幾乎是一樣的,但使用者需要開發兩套代碼,兩套叢集資源部署,導緻額外的成本。例如阿裡巴巴的商品搜尋索引建構流程,白天需要将商品的更新資訊流式同步到搜尋引擎中,讓使用者可以在搜尋引擎中看到實時的商品資訊,晚上需要将全量的阿裡巴巴商品進行批處理建構全量索引,這就是傳統的Lambda架構。

Apache Flink,流計算?不僅僅是流計算!

阿裡巴巴的解法是希望提供一套批流融合計算引擎,讓使用者隻需開發一套業務代碼,就可以在實時和離線兩種場景下複用,這也是在2015年阿裡巴巴選擇Flink作為未來大資料引擎的初衷。 Flink基于流處理機制實作批流融合相對Spark基于批處理機制實作批流融合的思想更自然,更合理,也更有優勢,是以阿裡巴巴在基于Flink支援大量核心實時計算場景的同時,也在不斷改進Flink的架構,使其朝着真正批流融合的統一計算引擎方向前進。

在Flink Runtime領域,阿裡巴巴提出了全新的Operator Framework/API設計,使其能夠同時适應批流兩種算子特性;同時在Job排程和網絡Shuffle兩種核心機制上,都實作了靈活的插件化機制,使其能夠适應批流不同場景的需求。

在Flink SQL領域,阿裡巴巴提出了全新的Query Execution和Optimizer架構,利用高效的二級制資料結構,更加合理的記憶體利用方式,更細粒度的Codegen機制以及更加豐富的優化器政策,使得Streaming 和Batch SQL都有了非常大的性能提升。

Apache Flink,流計算?不僅僅是流計算!

經過大量架構改進和性能優化後,阿裡巴巴内部Flink版本(Blink)在批處理上也實作了重大成果突破,在1T,10T和30T的TPC-DS的Benchmark中,Blink的性能資料均明顯超出Spark,并且性能優勢在資料量不斷增加的趨勢下越來越明顯,這也從結果上驗證了Flink基于流做批的架構優勢。

Apache Flink,流計算?不僅僅是流計算!

目前,阿裡巴巴的内部Flink版本(Blink)已經開始支援内部批流融合的應用場景,例如阿裡巴巴的搜尋推薦算法平台,流式和批量的特征以及訓練流程都已經統一基于Flink在運作。

Apache Flink,流計算?不僅僅是流計算!

蔣曉偉在分享的最後給出了對Flink未來的一些展望,他認為Flink除了批流融合,還有很多新的方向值得去擴充,例如:Flink可以進一步加強在機器學習和圖計算生态上的投入,進而在AI浪潮中實作新的突破。

此外,Flink天然具備基于事件驅動的處理思想,天然的反壓和流控機制,以及自帶狀态管理和彈性擴縮容的能力,這些優勢都在促使基于Flink建構微服務架構成為一種新的思想和解決方案。

Apache Flink,流計算?不僅僅是流計算!

總結蔣曉偉老師的分享,Apache Flink過去雖然在流計算領域已經獲得很大的成功,但Flink并沒有停滞,而是正在不斷在突破自己的邊界,Flink不僅僅是Streaming Engine,也不僅僅是Bigdata Engine,未來更希望努力成為Application Engine。

Apache Flink,流計算?不僅僅是流計算!

流處理即未來

接下來來自DA(Flink創始公司)的CTO - Stephan Ewen也對Flink的發展趨勢給出類似的觀點。Stephan認為“Streaming Takes on Everything”即流處理是一切計算的基礎, Flink一方面需要朝着離線方向發展,實作批流融合大資料計算能力,另一方面也需要朝着更加實時線上方向發展,支援Event-Driven Application。前面已經重點闡述了Flink在批流融合計算方面的進展,接下來我們重點介紹下Flink在Event-Driven Application方向的思路。

Apache Flink,流計算?不僅僅是流計算!

傳統的應用服務架構一般是Online App +Database的架構,Online App負責接收使用者Request,然後進行内部計算,最後将Result傳回給使用者,Application的内部狀态資料存儲在Database中;在Flink的event-drivenApplication架構中,可以認為Flink Source接收Request, Sink傳回Result,JobGraph進行内部計算,狀态資料都存儲在State中。

Apache Flink,流計算?不僅僅是流計算!

傳統應用服務架構需要自己負責分布式和彈性管理,并由Database負責資料一緻性管理;而Flink在這兩方面是存在天然優勢的,因為Flink天然是分布式系統,可以自己管理彈性伸縮,此外Flink内置了狀态管理和exactly once一緻性語義,是以基于Flink可以更友善、高效實作Transactional Application。

城市級實時計算的力量

在Apache Flink社群大神Stephan Ewen的分享後,來自阿裡雲的AI首席科學家闵萬裡向大家分享了實時計算在阿裡雲智慧城市中發揮的力量,通過分享多個真實應用案例,讓大家對實時技術有了更多的體感和認識。

在城市大腦的業務場景中,不僅要能實時處理來自各種傳感器收集到的資訊,對現實世界發生的事情進行響應,同時也要對未來将要發生的事情進行預測,例如:接下來那裡可能要發生交通擁堵,進而提前做出幹預,這才是更大的價值。整個城市大腦的架構都運作在阿裡雲基礎設施之上,Apache Flink承擔了核心實時計算引擎的角色,負責處理各種結構化和非結構化資料。

Apache Flink,流計算?不僅僅是流計算!

在2018年9月的雲栖大會上,阿裡雲釋出了杭州城市大腦2.0,覆寫杭州420平方公裡,可以監控到超過150萬輛在途行駛機動車的實況資訊,這個看似簡單的事情在過去是很難做到的,現在我們通過1300多個路口的攝像頭、傳感器以及高德App的實時資訊,通過Flink進行三流合一的處理,就可以實時感覺到整個城市交通的脈搏資訊,并通過進一步分析可以得出延誤、安全等交通指數,預測感覺城市的态勢發展。

Apache Flink,流計算?不僅僅是流計算!

在杭州,城市大腦通過實時分析4000多個交通攝像頭采集的視訊流,可以實時監控路上車輛的異常事件,例如:車輛超速、逆行和擦碰等,并将這些異常事件實時同步到交警指揮中心進行實時報警,目前杭州的交通事件報警已經有95%來自城市大腦自動通報的,這背後都是通過Flink進行各種複雜的計算邏輯實時算出來的。實時計算讓交警處理交通故障的方式從過去的被動等待變成了主動處理,進而大幅提升城市交通的效率,為老百姓帶來實實在在的好處。

Apache Flink,流計算?不僅僅是流計算!

這50%,關乎生死

2018年,城市大腦第一次走出國門,來到馬來西亞吉隆坡,基于實時大資料對交通進行智能排程,它可以根據救護車的行駛資訊,以及沿途路況資訊,智能調整紅綠燈,為救護車開辟綠色快速通道,這項技術為救護車節省了近50%的時間到達醫院,這50%的時間可能意味着人的生和死,在這裡技術顯得不再骨感,實時計算的力量也許可以挽救生命。

Apache Flink,流計算?不僅僅是流計算!

在工業生産IOT場景中,大量裝置的傳感器都收集了海量的名額資料,這些資訊過去都被暫存2個月後丢棄了,唯一的用途就是在出現生産故障時拿來分析用,在有了大資料實時計算能力後,這些名額都可以被實時監控起來,作為及時調控生産流程的依據。協鑫光伏是全球最大的光伏切片企業,阿裡雲利用實時裝置監控,幫助其提高了1%的良品率,每年可以增加上億元的收入。

Apache Flink,流計算?不僅僅是流計算!

滴滴實時計算平台架構與實踐

Keynote最後一位嘉賓是來自滴滴出行的研究員羅李,大家都知道滴滴出行是一個實時出行平台和交易引擎,它的資料和場景天然是實時的,各種網約車服務産生的資料都需要實時處理和分析。

Apache Flink,流計算?不僅僅是流計算!

滴滴的實時業務場景主要包括實時風控、實時發券、實時異常檢測,實時交易、服務和工單監控,以及實時乘客、司機和訂單特征處理等。

滴滴實時計算平台發展已經經曆了三個階段,第一階段是各個業務方自建小叢集,造成叢集和資源碎片化問題;第二階段由公司統一建立了大叢集,提供統一的平台化服務,降低了叢集資源和維護成本;第三階段是通過Flink SQL方式提供平台化服務,通過SQL語言優勢進一步降低業務開發成本,提升開發效率。

滴滴現階段基于Apache Flink引擎建設的實時計算平台以開源的Hadoop技術體系作為平台底座,并通過DataStream, SQL和CEP三種API向滴滴内部業務提供實時計算服務,同時在平台層也已經具備相對完善的WebIDE、資料血緣管理、監控報警和多組合隔離等機制。

Apache Flink,流計算?不僅僅是流計算!

在滴滴實時業務的快速發展推動下,其實時計算叢集已經達到千台規模,每天運作2000+流計算任務,可以處理PB級的資料。

滴滴在搭建Flink實時計算平台的過程中,在内部也對Flink做了一些改進,例如在 Stream SQL領域擴充了DDL,豐富了 UDF,支援了TTL的雙流Join和維表Join等;在CEP領域,增加了更多算子支援和規則動态修改能力等,其中部分優化已經推回了社群。

Apache Flink,流計算?不僅僅是流計算!

最後,羅李介紹了滴滴實時計算平台的未來規劃,主要方向在于進一步推廣Stream SQL提升業務開發效率,推動CEP在更多業務場景落地,同時完成公司内部原有Spark Streaming向Flink的遷移,并發力IOT領域。

在下午的幾個分會場中,來自阿裡巴巴、騰訊、華為、滴滴、美團點評、位元組跳動、愛奇藝、去哪兒、Uber、EMC、DA(Flink 創始公司)的多位嘉賓和講師都圍繞Flink技術生态和應用場景進行了分享和交流。從分享的内容上可以看出,BAT三家中阿裡巴巴和騰訊都已經完全擁抱了Flink;美團、滴滴和位元組跳動(TMD)三家新興網際網路企業在實時計算場景也都已經以Flink作為主流技術方向開始建設,滴滴在Keynote上分享已經令人印象深刻,美團的實時計算叢集也已經突破4000台規模,位元組跳動(頭條和抖音的母公司)的Flink生産叢集規模更是超過了1w台的驚人規模 。

Apache Flink,流計算?不僅僅是流計算!

由此可見Apache Flink的技術理念已經在業界得到了大量認可,基于Flink的實時計算解決方案開始在國内占據主流趨勢。下一步Flink需要一方面繼續完善流計算能力,争取在IOT等更多場景落地,與此同時進一步加強在批流融合能力上的全面突破,并完善在機器學習和AI生态上的建設,以及在event-driven的application和微服務場景上進行更長遠的探索。

我們期待與你一起共建更好的Apache Flink。