阿里重磅開源 Blink:為什麼我們等了這麼久?
今年,實時流計算技術開始步入主流,各大廠都在不遺餘力地試用新的流計算框架,實時流計算引擎和 API 諸如 Spark Streaming、Kafka Streaming、Beam 和 Flink 持續火爆。阿里巴巴自 2015 年開始改進 Flink,並建立了內部分支 Blink,目前服務於阿里集團內部搜尋、推薦、廣告和螞蟻等大量核心實時業務。12 月 20 日,由阿里巴巴承辦的 Flink Forward China 峰會在北京國家會議中心召開,來自阿里、華為、騰訊、美團點評、滴滴、位元組跳動等公司的技術專家與參會者分享了各公司基於 Flink 的應用和實踐經驗。在大會的主題演講上,阿里巴巴集團副總裁周靖人宣佈,阿里巴巴內部 Flink 版本 Blink 將於 2019 年 1 月正式開源!阿里希望通過 Blink 開源進一步加深與 Flink 社群的聯動,並推動國內更多中小型企業使用 Flink。
會上,我對阿里巴巴計算平臺事業部研究員蔣曉偉(花名量仔)進行了獨家專訪,他與我們分享了關於下一代實時流計算引擎的看法,並針對 Blink 的重要新特性、開源後 Blink 與 Flink 之間的關係、Blink 後續規劃等問題進行了解答。
阿里巴巴與 Flink
隨著人工智慧時代的降臨和資料量的爆發,在典型的大資料業務場景下,資料業務最通用的做法是:選用批處理的技術處理全量資料,採用流式計算處理實時增量資料。在許多業務場景之下,使用者的業務邏輯在批處理和流處理之中往往是相同的。但是,使用者用於批處理和流處理的兩套計算引擎是不同的。
因此,使用者通常需要寫兩套程式碼。毫無疑問,這帶來了一些額外的負擔和成本。阿里巴巴的商品資料處理就經常需要面對增量和全量兩套不同的業務流程問題,所以阿里巴巴就在想:能不能有一套統一的大資料引擎技術,使用者只需要根據自己的業務邏輯開發一套程式碼。這樣在各種不同的場景下,不管是全量資料還是增量資料,亦或者實時處理,一套方案即可全部支援,這就是阿里巴巴選擇 Flink 的背景和初衷。
彼時的 Flink 不管是規模還是穩定性尚未經歷實踐,成熟度有待商榷。阿里巴巴實時計算團隊決定在阿里內部建立一個 Flink 分支 Blink,並對 Flink 進行大量的修改和完善,讓其適應阿里巴巴這種超大規模的業務場景。簡單地說,Blink 就是阿里巴巴開發的基於開源 Flink 的阿里巴巴內部版本。
阿里巴巴基於 Flink 搭建的平臺於 2016 年正式上線,並從阿里巴巴的搜尋和推薦這兩大場景開始實現。目前阿里巴巴所有的業務,包括阿里巴巴所有子公司都採用了基於 Flink 搭建的實時計算平臺。
目前,這套基於 Flink 搭建的實時計算平臺不僅服務於阿里巴巴集團內部,而且通過阿里雲的雲產品 API 向整個開發者生態提供基於 Flink 的雲產品支援。
以下內容整理自 AI 前線對蔣曉偉的採訪。
開源的時機
我:為什麼選擇現在將 Blink 開源?這其中有哪些考量?什麼樣的時機才是開源最合適的時機?
蔣曉偉:在我看來,有幾個因素:第一個因素是,這幾年我們一直試圖把阿里對 Flink 的改進推回社群,但社群有自己的步伐,很多時候可能無法把我們的變更及時推回去。對於社群來說,需要達成共識,才能更好地保證開源專案的質量,但同時就會導致推入的速度慢一些。經過這幾年積累,我們這邊和社群之間的差距已經變得比較大了。Blink 有一些很好的新功能,比如批處理功能,在社群版本是沒有的。在過去這段時間裡,我們不斷聽到有人問,Blink 什麼時候能開源、是不是能開源這樣的呼聲。我們有兩種方法,一種就是慢慢地推回去再給使用者用。但我們認為這樣等下去對社群不是最好的。我們還是希望儘快把我們的程式碼拿出來,儘量讓大家都能用起來。所以最近這半年,我們一直都在準備把程式碼整理好去進行開源。
選擇在這個時間點開源有幾個好處:第一個好處是我們所開源的這些程式碼在阿里內部經過像雙一十、雙十二這樣巨大流量的檢驗,讓我們對它的質量有更大的信心,這是非常大的好處;第二個好處,Flink Forward 大會是第一次在中國舉辦,在這樣一個場合開源表明了阿里對 Flink 社群堅定的支援,這是一個比較好的場合。主要是基於這些考慮。
選 Blink 還是 Flink?這不會是一個問題
我:開源的 Blink 版本會和阿里巴巴內部使用的 Blink 保持一致嗎?
蔣曉偉:即將開源的是阿里巴巴雙十二的上線版本,還會有一些小的改進。
我:Blink 開源後,兩個開源專案之間的關係會是怎樣的?未來 Flink 和 Blink 也會由不同的團隊各自維護嗎?
蔣曉偉:開源的意思是,我們願意把 Blink 的程式碼貢獻出來,但這兩個專案是一個專案。有一件事情需要澄清一下,我們將公開 Blink 的所有程式碼,讓大家都可以看到,但與此同時,我們會跟社群一起努力,通過討論決定 Blink 以什麼樣的方式進入 Flink 是最合適的。因為 Flink 是一個社群的專案,我們需要經過社群的同意才能以分支的形式進入 Flink,或者作為變更 Merge 到專案中。我想強調一下,我們作為社群的一員需要跟社群討論才能決定這件事情。
Blink 永遠不會成為另外一個專案,如果後續進入 Apache 一定是成為 Flink 的一部分,我們沒有任何興趣另立旗幟,我們永遠是 Flink 的一部分,也會堅定地支援 Flink。我們非常願意把 Blink 的程式碼貢獻給所有人,所以明年 1 月份我們會先將 Blink 的程式碼公開,但這期間我們也會和社群討論,以什麼樣的形式進入 Flink 是最合適的、怎麼貢獻是社群最希望的方式。
我們希望,在 Blink 開源之後,和社群一起努力,把 Blink 好的地方逐步推回 Flink,成為 Flink 的一部分,希望最終 Flink 和 Blink 變成一個東西,阿里巴巴和整個社群一起來維護。而不是把它分成兩個東西,給使用者選擇的困難,這不是我們想要的。
因此未來使用者也不會面臨已經部署了 Flink、是否要把 Flink 遷移到 Blink 的問題,企業選型時也不需要在 Flink 和 Blink 之間抉擇,Blink 和 Flink 會是同一個專案。Blink 開源只有一個目的,就是希望 Flink 做得更好。
Blink 改進了什麼?
我:能不能重點介紹一下即將開源的 Blink 版本有哪些比較重要的新技術特性?與 Flink 最新發布版本相比,阿里的 Blink 做了哪些方面的優化和改進?
蔣曉偉:阿里巴巴實時計算團隊不僅對 Flink 在效能和穩定性上做出了很多改進和優化,同時在核心架構和功能上也進行了大量創新和改進。過去兩年多,有很多更新已經推回給社群了,包括 Flink 新的分散式架構等。
目前我們的 Blink 版本跟社群版本還有幾點差異,第一個是穩定性方面,我們做了一些優化,在某些場景會比社群版本更加穩定,特別是在大規模場景。另外還有一個比較大的不一樣是我們全新的 Flink SQL 技術棧,它在功能上,特別是在批處理的功能上比社群版本強大很多。它支援現在標準 SQL 幾乎所有的語法和語義。另外,在效能上,無論是在流式 SQL 還是批 SQL,我們的版本在效能上都有很大的優勢。特別是在批 SQL 的效能方面,當前 Blink 版本是社群版本效能的 10 倍以上,跟 Spark 相比,在 TPCDS 這樣的場景 Blink 的效能也能達到 3 倍以上。如果使用者對批處理或者對 SQL 有著比較強的需求,我們這個版本會使用者可以得到很多好處。
Blink 在阿里內部的應用
我:請介紹一下 Blink 在阿里內部的使用情況。目前 Blink 在阿里的大資料架構中扮演什麼樣的角色?在阿里內部主要用於哪些業務和應用場景?
蔣曉偉:現在阿里的大資料平臺上,所有的實時計算都已經在使用 Blink;同時,除了實時計算以外,在一些流批一體化的場景也會用 Blink 來做批處理;我們在機器學習場景也有一個探索,叫做 Alink,這個專案是對 Flink Machine Learning Library 的改進,其中實現了大量的演算法,都是基於 Flink 做實時機器學習的演算法,Alink 在很多場景已經被證明在規模上有很大的優勢。同時,我們在圖計算場景也有一些探索。
我:目前阿里內部有多少部門在使用 Blink?
蔣曉偉:前段時間我們剛剛做過統計,阿里的技術部門大約有 70% 都在使用 Blink。Blink 一直是在使用者的反饋之中成長起來的,對於內部使用者反饋的資料傾斜、資源使用率、易用性方面的問題,Blink 都做了針對性的改進。
現在 Blink 用的最多的場景主要還是實時計算方面,阿里還有一些業務現在相對比較新,還沒有進入實時計算的領域,等這些業務進入實時計算領域時也會使用 Blink。
在批處理方面,阿里內部也有一個自研的批處理引擎叫做 MaxCompute,MaxCompute 也會擁抱 Flink 生態,在語法和語義上做和 Flink 相容的工作。未來,整個阿里的計算體系和平臺都會融入同一個生態。
後續規劃
我:接下來阿里對於 Blink 還有哪些規劃?包括技術改進、落地應用、更新維護、社群等幾個方面。
蔣曉偉:從技術上說,今天我們公佈了 Flink 在批處理上的成果,接下來,我們會對技術持續投入,我們希望每幾個月就能看到技術上有一個比較大的亮點。下一波亮點應該是機器學習場景。要把機器學習支援好,有一系列的工作要做,包括引擎的功能、效能和易用性。這些工作我們已經在內部的討論和進行之中,接下來幾個月,大家應該會看到一些成果。我們也在和社群討論一些事情。除了機器學習之外,我們在圖計算方面也有一些探索,包括對增量迭代更好的支援。做完這些之後,可以認為 Flink 作為大資料的計算引擎已經比較完備了。
同時,我們也重點去做 Flink 的生態,包括 Flink 與其他系統之間的關係、易用性等。Flink 要真正做好,不僅需要它本身功能強大,還需要把整個生態做得非常強大。這部分我們甚至會跟一些 ISV 合作,看看是不是能夠在 Flink 之上提供更好的解決方案,進一步降低使用者的使用門檻。
在社群方面,我們希望能夠把把 Blink 完全融入 Flink 社群,一起做 Flink 社群的運營,讓 Flink 真正在中國、乃至全世界大規模地使用起來。
在應用方面,實時流計算其實有很多很有潛力的應用場景,但有一些可能大家不是非常熟悉,我們會對這些場景做一些推廣。以實時機器學習為例,它往往能夠給我們帶來比一般的機器學習更大的效果提升。去年,實時強化學習給我們在搜尋上帶來了 20% 以上的提升。除此之外,在安全領域(比如實時的 Fraud Detection)、監控報警方面,還有 IoT 領域,實時流計算都有非常廣泛的應用場景。這些 Flink 現在可能已經做了,但是大家還沒有意識到,Flink 能夠給大家帶來這樣的商業上的好處。
我:Blink 開源之後,後續阿里在這基礎上做的變更和更新會以什麼樣的方式推回社群版本?
蔣曉偉:我們理想的方式是,阿里內部的版本是社群的 Flink 版本加上一些定製化的外掛,不需要對 Flink 本身做修改,而是對 Flink 做增加。比如跟阿里內部系統互動的部分跟社群是不適用的,就會保持在內部,我們希望這些修改不動 Flink 程式碼,而是用外掛的方式加在 Flink 上面。最終的方式就是,對於所有公司都有用的修改會在 Flink 程式碼本身做修改,使所有使用 Flink 的公司都能從中獲利,而對接阿里內部系統的部分就只在阿里內部使用。
下一代實時流計算引擎之爭
我:先在很多人提到實時流計算引擎,都會拿 Spark 和 Flink 來做對比,您怎麼看待下一代實時流計算引擎之爭?未來實時流計算引擎最重要的發展方向是什麼?
蔣曉偉:Spark 和 Flink 一開始 share 了同一個夢想,他們都希望能夠用同一個技術把流處理和批處理統一起來,但他們走了完全不一樣的兩條路,前者是用以批處理的技術為根本,並嘗試在批處理之上支援流計算;後者則認為流計算技術是最基本的,在流計算的基礎之上支援批處理。正因為這種架構上的不同,今後二者在能做的事情上會有一些細微的區別。比如在低延遲場景,Spark 基於微批處理的方式需要同步會有額外開銷,因此無法在延遲上做到極致。在大資料處理的低延遲場景,Flink 已經有非常大的優勢。經過我們的探索, Flink 在批處理上也有了比較大的突破,這些突破都會反饋回社群。當然,對於使用者來說,多一個選擇永遠是好的,不同的技術可能帶來不同的優勢,使用者可以根據自己業務場景的需求進行選擇。
未來,在大資料方向,機器學習正在逐漸從批處理、離線學習向實時處理、線上學習發展,而圖計算領域同樣的事情也在發生,比如實時反欺詐通常用圖計算來做,而這些欺詐事件都是實時地、持續不斷地發生,圖計算也在變得實時化。
但是 Flink 除了大資料領域以外,在應用和微服務的場景也有其獨特的優勢。應用和微服務場景對延遲的要求非常苛刻,會達到百毫秒甚至十毫秒級別,這樣的延遲只有 Flink 的架構才能做到。我認為應用和微服務其實是非常大的領域,甚至可能比大資料更大,這是非常激動人心的機會。上面這些都是我們希望能夠拓寬的應用領域。
我:在技術方面,Spark 和 Flink 其實是各有千秋,但在生態和背後支援的公司上面,Flink 是偏弱的,那麼後續在生態和企業支援這塊,阿里會如何幫助 Flink?
蔣曉偉:這次阿里舉辦 Flink Forward China 就是想推廣 Flink 生態的重要舉動之一。除了 Flink Forward China 大會,我們還會不定期舉辦各種線下 Meetup,投入大量精力打造中文社群,包括將 Flink 的英文文件翻譯成中文、打造 Flink 中文論壇等。在垂直領域,我們會去尋找一些合作伙伴,將 Flink 包裝在一些解決方案中提供給使用者使用。
我:關於開源專案的中立性問題。阿里現在在大力地推動 Flink 開源專案的應用和社群的發展,但業界其他公司(尤其是與阿里在其他業務上可能有競爭的公司)在考慮是否採用 Flink 的時候可能還是會對社群的中立性存在一些疑慮,對於這一點,阿里是怎麼考慮的?
蔣曉偉:阿里本身會投入非常大的力量推動 Flink 社群的發展和壯大,但我們也非常希望有更多企業、更多人加入社群,和阿里一起推動社群發展,這次阿里承辦 Flink Forward China 峰會就是想借此機會讓更多公司參與進來。光阿里一家是無法把 Flink 生態做起來的。我希望大家能夠看到我們在做的事情,然後消除這樣的疑慮。我們會用自己的行動表明,我們是真的希望把 Flink 的社群做大,在這件事情上,我們並不會有私心。