阿里新一代計算引擎Blink與SQL和機器學習的二三事

阿里新一代計算引擎Blink與SQL和機器學習的二三事

隨著大數據技術的不斷髮展和成熟,無論是傳統企業還是互聯網公司都已經不再滿足於離線批處理,實時流處理的需求和重要性日益增長。

近年來業界一直在探索實時流計算引擎和API,比如這幾年火爆的Spark Streaming、Kafka Streaming、Beam和Flink。阿里巴巴自2015年開始改進Flink,並創建了內部分支Blink,目前服務於阿里集團內部搜索、推薦、廣告和螞蟻等大量核心實時業務。其中Blink SQL和Table API(java/Scala版的類SQL API)是一套基於Blink引擎打造的可以同時支持流處理和批處理的統一的 API。與此同時,阿里巴巴還以Blink和分佈式存儲系統HBase為核心,設計並實現了一個面向算法人員、支持可視化自助開發運維的在線機器學習平臺Porsche。

作為Blink研發團隊的負責人之一,同時也是本次QCon上海2017“大數據實時流計算與人工智能”專題的出品人,王紹翾與我們分享了他關於實時流計算的看法,並對選擇Flink的原因、Blink對Flink所做的改進和優化、流數據SQL查詢,以及阿里巴巴自研的基於Blink的在線機器學習平臺Porsche等問題進行了解答。

Q:為什麼說如今企業對實時流計算的需求已經從nice to have變成must have?

大沙:今天新經濟體的崛起主要依託於兩個核心技術:大數據計算和人工智能。無論是傳統的大數據統計還是新興的人工智能,實時計算的能力都顯得十分重要。如何獲取數據、處理數據並從數據中挖掘有價值的信息,是各個新經濟體都努力在解決的問題,所以實時計算一直都是nice to have。可惜早期的實時計算是非常昂貴的。

隨著軟硬件的飛速發展,現在構建一套能夠支撐大規模、低延遲的實時計算處理引擎變得相對容易很多(這點非常類似於沉睡多年的deep learning的崛起,沒有新一代的軟硬件計算的升級,deep learning也只能停留在書本上)。

另外,越來越多的雲計算平臺開始支持實時計算產品,使得流計算更加觸手可及,門檻大大減低,人人都可以花相對合理的價格買到流計算的能力。這樣,實時計算就自然而然地變成了must have。因為不使用高性能的實時計算就意味著在商業競爭中有被對手趕超甩開的可能。

Q:您參加了今年9月在柏林召開的Flink Forward大會,能否跟我們分享一下流計算的最新進展?

大沙:我們從2016年開始先後參加了3次Flink Forward大會並做了分享。

9月在柏林的這次會議一個比較明顯的感受就是流計算的場景和用戶增長十分快速。除了國內外的大公司,一些中小企業也開始嘗試用流計算支撐和服務業務。應用場景上,除了常見的實時數據統計和實時監控分析等等之外,還湧現了大量的使用流計算做人工智能的技術和案例,讓人十分振奮。

另外在這次大會上,dataArtisans和阿里巴巴都公佈將在近期更新升級各自的流計算雲平臺(dataAtisans的DA,和阿里的streamCompute)。有了這些實時流計算的雲平臺,可以預見到在未來的一年中,流計算應用和用戶還會持續快速增長。

Q:相比Spark Stream、Kafka Stream、Storm等,為什麼阿里會選擇Flink作為新一代流式計算引擎?前期經過了哪些調研和對比?

大沙:我們是2015年開始調研新一代流計算引擎的。我們當時的目標就是要設計一款低延遲、exactly once、流和批統一的,能夠支撐足夠大體量的複雜計算的引擎。Spark streaming的本質還是一款基於microbatch計算的引擎。這種引擎一個天生的缺點就是每個microbatch的調度開銷比較大,當我們要求越低的延遲時,額外的開銷就越大。這就導致了spark streaming實際上不是特別適合於做秒級甚至亞秒級的計算。

Kafka streaming是從一個日誌系統做起來的,它的設計目標是足夠輕量,足夠簡潔易用。這一點很難滿足我們對大體量的複雜計算的需求。

Storm是一個沒有批處理能力的數據流處理器,除此之外Storm只提供了非常底層的API,用戶需要自己實現很多複雜的邏輯。另外,Storm在當時不支持exactly once。種種原因,Storm也無法滿足我們的需求。

最後,我們發現了Flink,並且驚喜地發現它幾乎完美滿足了我們所有的需求:

a) 不同於Spark,Flink是一個真正意義上的流計算引擎,和Storm類似,Flink是通過流水線數據傳輸實現低延遲的流處理;

b) Flink使用了經典的Chandy-Lamport算法,能夠在滿足低延遲和低failover開銷的基礎之上,完美地解決exactly once的目標;

c)如果要用一套引擎來統一流處理和批處理,那就必須以流處理引擎為基礎。Flink還提供了SQL/tableAPI這兩個API,為批和流在query層的統一又鋪平了道路。因此Flink是最合適的批和流統一的引擎;

d) 最後,Flink在設計之初就非常在意性能相關的任務狀態state和流控等關鍵技術的設計,這些都使得用Flink執行復雜的大規模任務時性能更勝一籌。

Q:Blink和Flink的主要區別是什麼?Blink做了哪些優化和升級?

大沙:簡單的說Blink就是阿里巴巴開發的基於開源Flink的enterprise版計算引擎。如前面所說,雖然Flink在理論模型和架構方面有很多創新,但是在工程實現上還有不少問題。這些問題大多都是我們在大規模使用中發現的。阿里的業務場景非常複雜,job的體量都相當大,很多問題在一般的公司、一般的場景是很難接觸到的。

從2015到2016年,我們Blink團隊主要專注於解決Blink的runtime穩定性和scalability的問題:

a)優化了集群調度策略使得Blink能夠更好更合理地利用集群資源;

b)優化了checkpoint機制,使得Blink能夠很高效地處理擁有很大狀態的job;

c)優化了failover的策略,使得job在異常的時候能夠更快恢復,從而對業務延遲造成更少的影響;

d)設計了異步算子,使得Blink能夠在即使被讀取外部數據阻塞的同時還能繼續處理其他event,從而獲得整體非常高的吞吐率。

在擁有了穩定的runtime之後,我們開始專注於增強Blink的易用性。所以從2016年底到現在,我們大力開發Blink實時計算SQL,通過SQL作為統一API服務於各種複雜業務。從規範streaming SQL的語義和標準,到實現UDX、join、aggregation、window等一系列SQL最重要的算子,我們幾乎一手打造了完整的streaming SQL,並且將這些工作推回了Flink社區。我們的工作也獲得了Flink社區的認可。截止今天,Blink團隊先後擁有了5位Flink committer。

Q:流數據的SQL查詢存在什麼難點?Blink SQL/Table API是一套基於Blink引擎打造的可以同時支持流處理和批處理的統一的 API,那麼它是否已經可以很好地解決流式數據的SQL查詢問題?是怎麼做到的?

流計算SQL設計中最大的難點就是Stream SQL的語義和標準。這個事情在Flink和Calcite兩個社區一直都在討論研究中,直到最近我們基本達成了共識,那就是“世界上不存在Stream SQL”。流和批的計算可以自然而然地在傳統SQL這一層統一。

流計算所特有的unbounded特性其實本質只是何時觀測抽樣計算結果,這種屬性可以作為一個job的configure來設置而無需去改變用戶的business query logic。為了能夠使用傳統SQL在流計算上執行,我們和Flink社區一起引入了dynamic table的概念。這裡不詳細展開,感興趣的可以去看一下我們今年在Flink官方blog上發表的這方面的介紹(“Continuous Queries on Dynamic Tables”, by Fabian Hueske, Shaoxuan Wang, and Xiaowei Jiang)。也可以去聽一下我們今年4月和9月在舊金山和柏林分別舉辦的Flink forward上的分享(在youtube上有視頻)。

除了dynamic table之外,我們還提出並解決了流計算撤回(retraction)等其他重要的流計算場景擁有的概念。有了這些語義和功能,使用傳統批處理SQL就能寫出Blink流式計算的任務,這樣就使得使用Blink SQL作為一個支持流處理和批處理的統一的API成為可能。

Q:阿里內部哪些業務和產品用到了Blink SQL?

大沙:我們基於Blink SQL打造了新一代阿里巴巴流計算平臺streamCompute。現在整個阿里集團包括搜索、推薦、廣告等大部分核心流計算業務都是通過streamCompute平臺來提供服務。我們近期還會通過阿里雲開放我們的streamCompute平臺,使更多的用戶享受到Blink實時計算帶來的便捷。

Q:實時流式計算對機器學習平臺的重要性體現在哪裡?隨著人工智能技術的發展,對實時流式計算的需求會發生哪些變化?

大沙:早期的機器學習都是通過離線大數據做全量計算提取特徵、訓練模型,然後再將這些特徵和模型應用於系統之中從而影響算法結果。這種離線計算往往需要數小時甚至數天的時間,這就使得本來能夠實時採集的數據最終需要經歷一個很長的週期才能對算法結果產生影響。在某些極端情況下,這種離線計算產生的模型和特徵都不能正確合理地體現算法效果。因此,如何通過實時計算引擎及時地同步數據的變化,從而快速地完成數據處理、特徵提取、模型訓練等一系列操作,就顯得至關重要。

從我們多年在人工智能方面的經驗來看,當一個新的人工智能技術在離線建模方面拿到比較好的結果之後,算法工程師們就會自然而然地開始思考如何把離線建模和實時計算使用結合起來,甚至是把離線建模變為實時建模。可惜早期的實時計算非常昂貴,隨著軟硬件飛速發展,慢慢地有一些公司擁有了一套能夠支撐大規模、低延遲、高一致性保障的實時計算處理引擎之後,他們就開始利用機器學習、深度學習等人工智能技術從實時數據中高效地挖掘出有價值的信息。

隨著人工智能技術的快速發展,新的人工智能算法和新的計算硬件層出不窮。因此除了要擁有實時計算的能力,計算學習平臺往往還需要能夠十分方便地集成各種算法和計算硬件。這些往往都是一個好的實時計算學習平臺的核心競爭力。

Q:您這次擔任出品人的專題中也為大家帶了阿里新一代實時機器學習平臺Porsche,而Porsche的實時計算部分主要就是基於Blink,請介紹一下Porsche是如何基於Blink實現“在線機器學習”的?

大沙:阿里巴巴是一個非常重視以技術推動商業發展的公司。我們現在的核心電商業務的搜索和推薦後端都大量使用了人工智能技術。為了很好地支撐和接入業務,我們開發了一個面向用戶的可視化算法平臺,Porsche。

在這個平臺上面,用戶只需要簡單地拖拽機器學習組件,按照需要連接他們,再做一些相應的配置,一個機器學習任務就能夠完成。這樣一方面使得使用Blink實時計算的門檻變得更低,另一方面又使得一個通用的算法組件能被更多的用戶使用,大大降低了開發成本。

Q:未來阿里在機器學習平臺、深度學習平臺和人工智能生態建設上還有哪些規劃?是否會考慮向外界輸出實時計算能力或推出開放的機器學習或深度學習平臺?

大沙:由於人工智能算法或者模型往往和業務邏輯有著一定的聯繫,所以不是特別適合開放給外界。但是不排除在不遠的將來,我們會將一些通用的人工智能算法通過我們的機器學習平臺開放給更多的外部用戶使用。

End.


分享到:


相關文章: