阿里妹導讀:2018年12月下旬,由阿里巴巴集團主辦的Flink Forward China在北京國家會議中心舉行。Flink Forward是由Apache軟件基金會受權的全球範圍內的Flink技術大會,2015年開始在德國柏林舉辦,今年第一次進入中國。mysql
今天,計算平臺事業部的資深技術專家莫問,將帶領咱們重溫這場大數據技術的饕餮盛宴,感覺Apache Flink 做爲下一代大數據計算引擎的繁榮生態。git
Flink Forward China 大會邀請到了來自阿里巴巴、騰訊、華爲、滴滴、美團點評、字節跳動、愛奇藝、去哪兒、Uber、DellEMC、DA(Flink 創始公司)等國內外知名企業以及Apache軟件基金會的嘉賓爲你們分享了Apache Flink的成長曆程、應用場景和發展趨勢。github
Flink Forward China 2018 嘉賓PPT及演講視頻:redis
https://github.com/flink-china/flink-forward-china-2018算法
上午大會由Apache軟件基金會的祕書長Craig Russell開場,Craig首先分享了Apache開源之道,以及開源社區的精神和體制,而後以Apache Flink項目的成長經歷爲背景,向你們介紹瞭如何建立以及管理一個Apache開源項目,如何爲Apache開源項目作貢獻,並跟隨開源項目一塊兒成長和收穫。sql
經過Craig的分享,咱們也更詳細地瞭解到了Apache Flink的發展經歷。Flink早期起源於德國柏林工業大學的一個研究項目Stratosphere,並於2014年4月捐獻給Apache軟件基金會,同時從新定位品牌爲Flink,通過8個月孵化期,在2014年12月成功從Apache軟件基金會畢業,成爲Apache頂級項目,今後開始在大數據領域航行。通過最近4年的持續快速發展,Apache Flink社區已經培養出了42名Committer和19名PMC Member,不斷加入的新鮮血液爲Apache Flink社區持續貢獻代碼,並推進社區健康快速的發展。數據庫
在Craig分享後,阿里巴巴集團副總裁、搜索事業部與計算平臺事業部負責人周靖人進行了主題演講。靖人首先向你們介紹了阿里巴巴大數據雲上計算的現狀和趨勢,讓你們看到了阿里巴巴大數據業務場景的超大規模,以及將來更大的挑戰。安全
爲了更好地支持阿里巴巴將來大數據的發展,阿里大數據發展策略一方面要進一步提高計算力和智能化,加強企業級服務能力。同時也要增強技術的生態化建設,大力支持並推進開源技術社區的發展,兼容行業生態標準,發展生態夥伴聯盟,推進生態建設。性能優化
目前阿里巴巴已經參與貢獻230+開源項目,具有8000+合做夥伴和2000+ ISV,雲上生態也已經突破1000,000開發人員。在大數據領域,阿里巴巴最近幾年對Apache Flink社區進行了持續大力的投入,貢獻超過15w行代碼,主導創建了Flink China中文社區,加速Flink在國內的生態建設,並於今年開始在北京、杭州、上海、深圳等地屢次組織Flink Meetup,促進國內Flink技術人員更方便的分享交流。網絡
靖人在分享的最後宣佈了阿里巴巴內部Flink版本(Blink)將於2019年1月正式開源,本次開源內部版本的目標主要是但願讓廣大Flink用戶能提早享受到阿里巴巴對Flink的改進和貢獻。阿里巴巴同時會盡快將Blink中對Flink的各項改進和優化貢獻給Flink社區,堅持對Apache Flink一個社區的擁抱和支持。
在靖人宣佈阿里巴巴開源內部Flink版本(Blink)後,阿里巴巴集團研究員蔣曉偉分享了Apache Flink在阿里巴巴內部的成長路線以及技術演進之路。
阿里巴巴從2015年開始調研Flink,並於2016年第一次在搜索場景中上線Flink,在通過搜索大數據場景的檢驗後,2017年Flink開始在阿里巴巴集團範圍內支持各項實時計算業務, 到目前爲止阿里巴巴基於Flink打造的實時計算平臺,已經支持了包括淘寶、天貓、支付寶、高德、飛豬、優酷、菜鳥、餓了麼等全部阿里巴巴集團下的全部子公司的數據業務,並經過阿里雲向中小企業提供一站式實時計算服務。在2018年的雙11中,阿里實時計算平臺已經實現了峯值每秒17億次,當天萬億級的消息處理能力。
Apache Flink目前在阿里巴巴內部最典型的業務場景是實時BI,阿里巴巴內部有着海量的在線交易以及用戶數據,實時看到各個維度的數據統計能夠及時地感知並指導阿里巴巴的運營。下圖是一個典型的阿里實時BI流程,阿里的在線服務系統和數據庫會實時產生大量日誌數據並進入消息隊列,FlinkJob會從消息隊列中實時讀取處理這些數據,而後將各類統計分析結果實時更新到KV/Table存儲系統中,例如:HBase,終端用戶能夠經過Dashboard實時看到各類維度的數據統計分析結果。
在雙11當天,各類維度的實時數據報表是指導雙11決策的依據,其中最爲關鍵的就是全球直播的實時GMV成交額。Flink已經連續兩年支持阿里巴巴雙11實時GMV大屏,一個看似簡單的數字,其背後實際上須要大量Flink計算任務平穩、精準地運行支撐。
Flink在阿里巴巴另外一個典型的應用場景是在線機器學習,傳統的離線機器學習方法須要T+1的分析用戶歷史行爲,訓練出模型,當次日模型上線後就已是過去式,用戶當前的需求和預期可能已經徹底改變。爲了給用戶更好的購物消費體驗,阿里巴巴的機器學習系統早已經進化到在線學習時代,例如:當一個用戶在搜索完一個Query,瀏覽結果頁時,或者點擊查看部分商品時,阿里巴巴的在線學習系統已經能夠利用這個間隙瞭解到這個用戶當時的意圖和偏好,並在下次用戶Query時給出更好的排序,並向用戶推薦更合適的商品,這種方式不只能夠進一步提高業務效率,同時也能爲用戶帶來更好的產品體驗,尤爲是在雙11這種大促場景,用戶的行爲時效性都是很短的,只有經過實時在線學習方式,才能作出更加精確的個性化預測和推薦。
在線學習系統的優點在於能夠實時收集並處理用戶的行爲數據,從而進行實時流式的特徵計算和在線訓練,並將模型的增量更新實時同步回在線系統,造成數據閉環,經過不斷迭代自動優化系統效率和用戶體驗。在阿里的業務規模下,整個在線學習流程將會面對海量的用戶數據規模、和極其複雜的計算挑戰,但在Flink的驅動下,整個流程能夠在秒級完成。
經過以上兩種經典場景能夠看出阿里巴巴實時業務場景在各方面的挑戰都很大,直接將Flink社區版本在阿里上線使用是不現實的,所以阿里巴巴實時計算團隊這兩年也對Flink進行了全面的優化、改進和功能擴展,其中有些功能和改進已經推回到了Flink社區。
全新的分佈式系統架構:一方面對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適配。
在阿里巴巴,咱們發現不少經典的業務場景都是同時具有實時流處理和離線批處理兩種需求,並且流處理和批處理中的業務邏輯幾乎是同樣的,但用戶須要開發兩套代碼,兩套集羣資源部署,致使額外的成本。例如阿里巴巴的商品搜索索引構建流程,白天須要將商品的更新信息流式同步到搜索引擎中,讓用戶能夠在搜索引擎中看到實時的商品信息,晚上須要將全量的阿里巴巴商品進行批處理構建全量索引,這就是傳統的Lambda架構。
阿里巴巴的解法是但願提供一套批流融合計算引擎,讓用戶只需開發一套業務代碼,就能夠在實時和離線兩種場景下複用,這也是在2015年阿里巴巴選擇Flink做爲將來大數據引擎的初衷。 Flink基於流處理機制實現批流融合相對Spark基於批處理機制實現批流融合的思想更天然,更合理,也更有優點,所以阿里巴巴在基於Flink支持大量核心實時計算場景的同時,也在不斷改進Flink的架構,使其朝着真正批流融合的統一計算引擎方向前進。
在Flink Runtime領域,阿里巴巴提出了全新的Operator Framework/API設計,使其可以同時適應批流兩種算子特性;同時在Job調度和網絡Shuffle兩種核心機制上,都實現了靈活的插件化機制,使其可以適應批流不一樣場景的需求。
在Flink SQL領域,阿里巴巴提出了全新的Query Execution和Optimizer架構,利用高效的二級制數據結構,更加合理的內存利用方式,更細粒度的Codegen機制以及更加豐富的優化器策略,使得Streaming 和Batch SQL都有了很是大的性能提高。
通過大量架構改進和性能優化後,阿里巴巴內部Flink版本(Blink)在批處理上也實現了重大成果突破,在1T,10T和30T的TPC-DS的Benchmark中,Blink的性能數據均明顯超出Spark,而且性能優點在數據量不斷增長的趨勢下愈來愈明顯,這也從結果上驗證了Flink基於流作批的架構優點。
目前,阿里巴巴的內部Flink版本(Blink)已經開始支持內部批流融合的應用場景,例如阿里巴巴的搜索推薦算法平臺,流式和批量的特徵以及訓練流程都已經統一基於Flink在運行。
蔣曉偉在分享的最後給出了對Flink將來的一些展望,他認爲Flink除了批流融合,還有不少新的方向值得去擴展,例如:Flink能夠進一步增強在機器學習和圖計算生態上的投入,從而在AI浪潮中實現新的突破。
此外,Flink自然具有基於事件驅動的處理思想,自然的反壓和流控機制,以及自帶狀態管理和彈性擴縮容的能力,這些優點都在促使基於Flink構建微服務框架成爲一種新的思想和解決方案。
總結蔣曉偉老師的分享,Apache Flink過去雖然在流計算領域已經得到很大的成功,但Flink並無停滯,而是正在不斷在突破本身的邊界,Flink不只僅是Streaming Engine,也不只僅是Bigdata Engine,將來更但願努力成爲Application Engine。
接下來來自DA(Flink創始公司)的CTO - Stephan Ewen也對Flink的發展趨勢給出相似的觀點。Stephan認爲「Streaming Takes on Everything」即流處理是一切計算的基礎, Flink一方面須要朝着離線方向發展,實現批流融合大數據計算能力,另外一方面也須要朝着更加實時在線方向發展,支持Event-Driven Application。前面已經重點闡述了Flink在批流融合計算方面的進展,接下來咱們重點介紹下Flink在Event-Driven Application方向的思路。
傳統的應用服務架構通常是Online App +Database的架構,Online App負責接收用戶Request,而後進行內部計算,最後將Result返回給用戶,Application的內部狀態數據存儲在Database中;在Flink的event-drivenApplication架構中,能夠認爲Flink Source接收Request, Sink返回Result,JobGraph進行內部計算,狀態數據都存儲在State中。
傳統應用服務架構須要本身負責分佈式和彈性管理,並由Database負責數據一致性管理;而Flink在這兩方面是存在自然優點的,由於Flink自然是分佈式系統,能夠本身管理彈性伸縮,此外Flink內置了狀態管理和exactly once一致性語義,所以基於Flink能夠更方便、高效實現Transactional Application。
在Apache Flink社區大神Stephan Ewen的分享後,來自阿里雲的AI首席科學家閔萬里向你們分享了實時計算在阿里雲智慧城市中發揮的力量,經過分享多個真實應用案例,讓你們對實時技術有了更多的體感和認識。
在城市大腦的業務場景中,不只要能實時處理來自各類傳感器收集到的信息,對現實世界發生的事情進行響應,同時也要對將來將要發生的事情進行預測,例如:接下來那裏可能要發生交通擁堵,從而提早作出干預,這纔是更大的價值。整個城市大腦的架構都運行在阿里雲基礎設施之上,Apache Flink承擔了核心實時計算引擎的角色,負責處理各類結構化和非結構化數據。
在2018年9月的雲棲大會上,阿里雲發佈了杭州城市大腦2.0,覆蓋杭州420平方千米,能夠監控到超過150萬輛在途行駛機動車的實況信息,這個看似簡單的事情在過去是很難作到的,如今咱們經過1300多個路口的攝像頭、傳感器以及高德App的實時信息,經過Flink進行三流合一的處理,就能夠實時感知到整個城市交通的脈搏信息,並經過進一步分析能夠得出延誤、安全等交通指數,預測感知城市的態勢發展。
在杭州,城市大腦經過實時分析4000多個交通攝像頭採集的視頻流,能夠實時監控路上車輛的異常事件,例如:車輛超速、逆行和擦碰等,並將這些異常事件實時同步到交警指揮中心進行實時報警,目前杭州的交通事件報警已經有95%來自城市大腦自動通報的,這背後都是經過Flink進行各類複雜的計算邏輯實時算出來的。實時計算讓交警處理交通故障的方式從過去的被動等待變成了主動處理,從而大幅提高城市交通的效率,爲老百姓帶來實實在在的好處。
2018年,城市大腦第一次走出國門,來到馬來西亞吉隆坡,基於實時大數據對交通進行智能調度,它能夠根據救護車的行駛信息,以及沿途路況信息,智能調整紅綠燈,爲救護車開闢綠色快速通道,這項技術爲救護車節省了近50%的時間到達醫院,這50%的時間可能意味着人的生和死,在這裏技術顯得再也不骨感,實時計算的力量也許能夠挽救生命。
在工業生產IOT場景中,大量設備的傳感器都收集了海量的指標數據,這些信息過去都被暫存2個月後丟棄了,惟一的用途就是在出現生產故障時拿來分析用,在有了大數據實時計算能力後,這些指標均可以被實時監控起來,做爲及時調控生產流程的依據。協鑫光伏是全球最大的光伏切片企業,阿里雲利用實時設備監控,幫助其提升了1%的良品率,每一年能夠增長上億元的收入。
Keynote最後一位嘉賓是來自滴滴出行的研究員羅李,你們都知道滴滴出行是一個實時出行平臺和交易引擎,它的數據和場景自然是實時的,各類網約車服務產生的數據都須要實時處理和分析。
滴滴的實時業務場景主要包括實時風控、實時發券、實時異常檢測,實時交易、服務和工單監控,以及實時乘客、司機和訂單特徵處理等。
滴滴實時計算平臺發展已經經歷了三個階段,第一階段是各個業務方自建小集羣,形成集羣和資源碎片化問題;第二階段由公司統一創建了大集羣,提供統一的平臺化服務,下降了集羣資源和維護成本;第三階段是經過Flink SQL方式提供平臺化服務,經過SQL語言優點進一步下降業務開發成本,提高開發效率。
滴滴現階段基於Apache Flink引擎建設的實時計算平臺以開源的Hadoop技術體系做爲平臺底座,並經過DataStream, SQL和CEP三種API向滴滴內部業務提供實時計算服務,同時在平臺層也已經具有相對完善的WebIDE、數據血緣管理、監控報警和多組合隔離等機制。
在滴滴實時業務的快速發展推進下,其實時計算集羣已經達到千臺規模,天天運行2000+流計算任務,能夠處理PB級的數據。
滴滴在搭建Flink實時計算平臺的過程當中,在內部也對Flink作了一些改進,例如在 Stream SQL領域擴展了DDL,豐富了 UDF,支持了TTL的雙流Join和維表Join等;在CEP領域,增長了更多算子支持和規則動態修改能力等,其中部分優化已經推回了社區。
最後,羅李介紹了滴滴實時計算平臺的將來規劃,主要方向在於進一步推廣Stream SQL提高業務開發效率,推進CEP在更多業務場景落地,同時完成公司內部原有Spark Streaming向Flink的遷移,併發力IOT領域。
在下午的幾個分會場中,來自阿里巴巴、騰訊、華爲、滴滴、美團點評、字節跳動、愛奇藝、去哪兒、Uber、EMC、DA(Flink 創始公司)的多位嘉賓和講師都圍繞Flink技術生態和應用場景進行了分享和交流。從分享的內容上能夠看出,BAT三家中阿里巴巴和騰訊都已經徹底擁抱了Flink;美團、滴滴和字節跳動(TMD)三家新興互聯網企業在實時計算場景也都已經以Flink做爲主流技術方向開始建設,滴滴在Keynote上分享已經使人印象深入,美團的實時計算集羣也已經突破4000臺規模,字節跳動(頭條和抖音的母公司)的Flink生產集羣規模更是超過了1w臺的驚人規模 。
因而可知Apache Flink的技術理念已經在業界獲得了大量承認,基於Flink的實時計算解決方案開始在國內佔據主流趨勢。下一步Flink須要一方面繼續完善流計算能力,爭取在IOT等更多場景落地,與此同時進一步增強在批流融合能力上的全面突破,並完善在機器學習和AI生態上的建設,以及在event-driven的application和微服務場景上進行更長遠的探索。
本文做者: 莫問
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。