林琳
在阿里巴巴的發(fā)展過程中,流數(shù)據(jù)處理一直是業(yè)務中很重要的一部分。和數(shù)據(jù)分析平臺不一樣,阿里巴巴內(nèi)部的流數(shù)據(jù)處理平臺有很多套。
在阿里巴巴的流數(shù)據(jù)發(fā)展歷程里,有2個著名的流引擎JStorm和Blink產(chǎn)生著深遠的影響。這種影響并不僅僅在阿里巴巴集團的內(nèi)部,并且擴散到了全球的開源世界。比起其他用于集團內(nèi)部的流計算引擎,它們更易于被人所熟知,今天就來重點分析一下這2個流計算引擎的發(fā)展。
Storm和JStorm
Storm是被Twitter收購以后才開源出來的流計算引擎。阿里巴巴集團是在封仲淹帶領的團隊下才開始使用Storm的。
Storm這種流計算引擎是用一種比較小眾的函數(shù)式編程語言Clojure開發(fā)出來的。國內(nèi)的Clojure專家屈指可數(shù),因此阿里巴巴使用Storm時遇到了很多的問題。
畢竟有些時候需要去增加或者改變一些功能,而這就意味著需要對系統(tǒng)進行改進或者定制,但是Clojure語言十分小眾,懂這種編程語言的人尚且不多,更不用說專業(yè)去修改了,所以,這些都決定了這種工作非常難以展開。
鑒于Storm十分難以改進和定制,又是當時開源世界里最成熟的流計算引擎。于是,從2012年開始,阿里巴巴決定用Java對Storm進行重寫,這就是JStorm項目的由來。
按照封仲淹的觀點來說,JStorm就是Storm二次開發(fā)的產(chǎn)物,它可以讓用戶無縫地從Storm遷移到JStorm。
阿里巴巴選擇用Java進行開發(fā),這讓開發(fā)進度明顯加快。而且,源于阿里巴巴的應用規(guī)模、對數(shù)據(jù)實時性等種種要求,團隊對JStorm也進行了很多優(yōu)化??梢赃@么說,JStorm的出現(xiàn),解決了Storm存在的很多問題。
2015年11月19日,阿里巴巴集團正式向Apache基金會捐贈了JStorm。JStorm成為了Apache Storm下面的一個子項目,并在Apache基金會里繼續(xù)孵化。
那段時間,JStorm的作者們對于開源表現(xiàn)出非常大的積極性。封仲淹那時也表示,整個社區(qū)的Storm 2.0會基于阿里巴巴的JStorm,用Java語言進行開發(fā)。
然而世事無常,盡管JStorm在Apache的孵化器里待了快2年的時間,但依然沒有成為Apache基金會的頂級項目。同時,Storm2.0這個以阿里巴巴JStorm為主的開發(fā)項目更是連影子都沒有見到。
Flink和Blink
Flink是德國柏林工業(yè)大學設計的一個流計算引擎,現(xiàn)在是Apache的頂級開源項目。Flink這個引擎從模型的角度來看是非常先進的,但是在工程實現(xiàn)上卻相對薄弱一些。
Flink也被阿里巴巴集團用到了自己的生產(chǎn)環(huán)境中,項目的領導者是曾經(jīng)在微軟SQL Server組以及Facebook都待過的數(shù)據(jù)庫專家蔣曉偉。
他曾在接受采訪時表示,在Spark和Flink這2個引擎中,F(xiàn)link的設計理念更為先進一些,也更符合阿里巴巴對流計算引擎的要求,這恰恰也是他的團隊選擇這個引擎的原因。
阿里巴巴集團并沒有把Flink拿來直接使用,而是對Flink進行了大量的、全方位的改造,不僅提高了Flink的性能,而且改進了不少功能。這個項目在阿里巴巴內(nèi)部叫作Blink,是阿里巴巴集團內(nèi)部很多業(yè)務的流處理引擎,其重要地位可見一斑。
Blink目前還未開源,但在與社區(qū)的合作上,Blink團隊和Flink的開發(fā)者之間保持了更為友好的關(guān)系。Flink的開發(fā)團隊多次在公開場合感謝Blink團隊對Flink項目的貢獻,Blink團隊也把很多功能都反饋到了Flink的代碼庫里。
為什么JStorm和Blink同為由阿里巴巴主導的,針對Apache已有項目改良的產(chǎn)物,卻在和開源社區(qū)的互動以及對開源社區(qū)的影響方面有著不同的結(jié)果。個人認為,這其中大概有幾方面的原因。
首先,F(xiàn)link是后起之秀,又來自德國,還是從剛剛學校里出來的。在Flink流進市場的時候,北美的主要互聯(lián)網(wǎng)企業(yè)要么是已經(jīng)使用了自研的流計算引擎,要么就是已經(jīng)基于開源的流計算引擎開展了業(yè)務,不太可能短期內(nèi)更新流計算引擎到Flink,所以Flink本身就需要大客戶的支撐,阿里巴巴的出現(xiàn)恰逢其時。
其次是Flink團隊和阿里巴巴團隊的互補性比較強。前者理論基礎好,但是沒有工業(yè)界的開發(fā)經(jīng)驗,后者工業(yè)界開發(fā)經(jīng)驗卻很足,這也就讓雙方的合作有了基礎。
最后,也可能是最重要的一點就是,這還是一個面子問題。JStorm的做法是把Storm的整個代碼庫用另外一個語言完全重寫了一遍,這無疑是一種比較得罪人的做法。而Blink在貢獻回自己的代碼時,是在Flink原有代碼基礎上改的,并且改動時也和Flink的人做了仔細協(xié)商。也許就是這2種不同的合作態(tài)度,決定了2個項目的不同結(jié)果。
不過最新消息稱,經(jīng)過多年不同引擎之間的內(nèi)部PK,阿里巴巴在2018年終于確定了:未來Blink會是阿里巴巴集團統(tǒng)一的流計算引擎。
JStorm和其他的流計算引擎上的業(yè)務都會慢慢遷移過來,最終整個公司的所有流計算引擎的開發(fā)和維護資源都會集中到Blink上。這也是阿里巴巴集團內(nèi)部第一次對某種數(shù)據(jù)處理產(chǎn)品“一統(tǒng)江山”。
2個流計算引擎和開源社區(qū)的交流的不同結(jié)局告訴我們,和開源社區(qū)打交道,僅僅是提供自認為更加厲害的代碼給開源社區(qū)是遠遠不夠的。尤其是貢獻代碼的同時卻沒有給予社區(qū)主要貢獻者足夠的尊重,往往會讓事情往壞的方向發(fā)展。和社區(qū)的合作需要大量持續(xù)的互動和交流,以及對社區(qū)主要貢獻者的尊重。