阿里蔣曉偉:計算引擎Flink和Spark的異同與優勢

作者簡介:蔣曉偉老師,認真而嚴謹。在加入阿里之前,他曾就職於西雅圖的臉書,負責過調度系統,Timeline Infra和Messenger的項目。而後在微軟的SQL Server引擎擔任過Principal Engineer,負責關係數據庫的架構工作。2014年加入阿里以後,作爲阿里搜索事業部資深搜索專家,他負責搜索工程的數據團隊。

 

本文整理自雲棲社區之前對阿里搜索事業部資深搜索專家蔣曉偉老師的一次採訪。談起大數據框架,業內尤其對於開源大數據生態圈的許多優秀的計算框架耳熟能詳,比如Spark、Hadoop、Storm等。但對於Apache基金會的頂級項目的Flink,知道的都比較有限。而更多是對比Spark,比如知乎的帖子討論的就是“Apache Flink和Apache Spark有什麼異同?它們的發展前景分別怎樣?”

  • 雲棲社區:相比Spark、Hadoop、Storm等,是什麼樣的場景需求讓阿里搜索團隊選擇了Flink?

蔣曉偉:首先我們希望有個流計算和批處理的一體化處理方案。Spark和Flink都具有流和批處理能力,但是他們的做法是相反的。Spark Streaming是把流轉化成一個個小的批來處理,這種方案的一個問題是我們需要的延遲越低,額外開銷佔的比例就會越大,這導致了Spark Streaming很難做到秒級甚至亞秒級的延遲。Flink是把批當作一種有限的流,這種做法的一個特點是在流和批共享大部分代碼的同時還能夠保留批處理特有的一系列的優化。因爲這個原因,如果要用一套引擎來解決流和批處理,那就必須以流處理爲基礎,所以我們決定先選擇一個優秀的流處理引擎。從功能上流處理可以分爲無狀態的和有狀態兩種。在流處理的框架裏引入狀態管理大大提升了系統的表達能力,讓用戶能夠很方便地實現複雜的處理邏輯,是流處理在功能上的一個飛躍。流處理引擎對一致性的支持可以分爲:best effort,at least once 和 exactly once。Exactly once的語義才能真正保證完全的一致性,Flink採用的架構比較優雅地實現了exactly once的有狀態流處理。另外在保證了一致性的前提下Flink在性能上也是相當優秀的。總結一下,我們覺得在流處理方面Flink在功能,延遲,一致性和性能上綜合來看是目前社區最優秀的。所以我們決定採用它來實現流和批的一體化方案。最後,還有一個很重要的原因是Flink有一個比較活躍的社區。

  • 雲棲社區:如何看待Flink、Spark、Hadoop、Storm等技術發展和不同場景下的優勢對比?比如與Spark相反,Flink把批處理化作流處理,這種方式在使用時是否有什麼限制?

蔣曉偉:大數據是從批處理開始的,所以很多系統都是從批處理做起,包括Spark。在批處理上Spark有着較深的積累,是一個比較優秀的系統。隨着技術的發展,很多原來只有批處理的業務都有了實時的需求,流處理將會變得越來越重要,甚至成爲大數據處理的主要場景。Flink把批當作流來處理有個很重要的優點是如果我們在流中引入一個blocking的算子,我們還能接着做批處理特有的優化,這個是以流處理爲基礎的計算引擎的一大優勢。所以我認爲在架構上這種設計在批處理上是可以做到最優的,而且比傳統的做法還有一些特別的優勢,當然工程上的實現也很重要。

  • 雲棲社區:阿里巴巴搜索的流計算和批處理引擎的Blink是基於Apache Flink項目並且在API兼容的。那麼在Flink使用過程中有趟過哪些坑?Blink在哪些方面做出了改進?

蔣曉偉:Flink在架構上有很多創新,是非常領先的。但是在工程的實現上有一些不足之處。比如說不同的job的任務可能運行在同一個進程裏,這樣一個job的問題可能影響其他job的穩定性。Flink的工程實現也不能把集羣的資源最合理地利用起來。Blink重新實行了Yarn的結合,完全解決了這些問題。另外Flink是通過checkpoint的機制來保證一致性的,但原有的機制效率比較低,導致在狀態較大的時候不可用,Blink大大優化了checkpoint,能夠高效地處理很大的狀態。穩定性和scalability在生產上都是至關重要的,通過在大集羣上的錘鍊,Blink解決了一系列這方面的問題和瓶頸,已經成爲一個能夠支撐核心業務的計算引擎。同時我們擴展了Flink的Streaming SQL層,使得它能夠比較完備地支持較複雜的業務。

  • 雲棲社區:是否有反饋Flink社區的計劃?以及您認爲Flink未來的殺手級應用會是什麼?

蔣曉偉:我們正在和Flink的發明者Stephan溝通把Blink反饋回Flink社區,這樣才能讓社區更強大,而社區更強大我們也會更強大。我們計劃的第一步是把Blink的Yarn的實現反饋回去,並且抽象出一個支持不同調度系統的方案。接下來會把我們在checkpoint,穩定性,scalability, 可運維性,SQL等方面的改進和優化都陸續反饋回去。我覺得Flink在流計算上的優勢是非常大的,隨着在線學習等流計算需求的增長,在這方面Flink一定會大放異彩。

  • 雲棲社區:從Facebook、微軟到阿里,技術開發經驗豐富。那麼對於技術開發者的成長,有哪些建議或者經驗分享?以及推薦一本最喜歡的技術書籍。

蔣曉偉:我覺得在學習中和工作很重要的一點是遇到任何問題一定要刨根問底,不要停留在現象和一些淺層次的直觀的原因上,一定要找到本質。一個比較好的判定標誌是你能不能一句話給別人講清楚。要做到這個可能會讓你一開始花更多的時間,甚至覺得自己學得比別人慢很多,但是你學過的每個東西都是完全喫透的,而很多東西的原理是相通的,在一段時間的積累後你會發現學任何新東西就像看說明書一樣了。書我還真推薦不了,因爲我一般是有問題現查,反正是說明書。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章