1. 程式人生 > >拋棄Spark?Flink會是下一代大資料計算引擎嗎?

拋棄Spark?Flink會是下一代大資料計算引擎嗎?

Apache Spark是目前應用最廣泛、最流行的大資料計算平臺之一,在2.X版本中,Apache Spark已經開始摒棄RDD的資料模型,採用Spark SQL的Dataset作為統一的資料模型來構建更加高效的計算框架。然而,2015年成為Apache頂級專案的Apache Flink卻被很多人認為是未來最有可能取代Spark的新一代大資料計算引擎。本文將簡單介紹二者的區別以及為什麼會有這種說法。

Spark的流行除了本身是一個很優秀的框架外也有一些大資料生態的因素。眾所周知,雖然MapReduce框架開啟了大資料批處理的時代,但是因為自身的限制導致程式設計的靈活性受到很大影響,而Spark一開始採用的RDD資料模型則有更加高效靈活的程式設計方式,並且支援記憶體計算,這使得Spark更受歡迎。

 

本人對於大資料學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習大資料。歡迎各位到來大資料學習群:868847735 一起討論視訊分享學習。大資料是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握大資料核心技術,才是掌握真正的價值所在。

複雜的Hadoop生態

除此之外,還有個重要的因素是在大資料生態的多樣性。之前,包括批處理、實時處理、SQL查詢、互動分析等,在大資料生態中都有各自的一套元件,每一個應用場景都有著好幾種可替代的技術方案,但正常情況下,實際應用的場景都相對比較複雜,因此,構建一個適合自己業務場景的大資料引擎通常面臨著很多的技術方案,不同的方案優缺點不同,因此,構建一個完整的支撐業務場景的大資料引擎也要使用多種種技術,這導致了很多問題:如技術學習曲線陡峭、開發和執行效率低下、運維的困難等。

而Spark從一開始就使用一個統一的引擎進行批處理、流處理、互動分析等,使得應用價值大大提高。

 

儘管Spark在批處理上有很大優勢,但是在流處理方面依然有很大的缺陷。首先,Spark Streaming是準實時的,它處理的方式是微批處理模型。在動態調整、事物機制、延遲性、吞吐量等方面並不優秀。但是由於Spark位於Spark生態中,它可以很好的與其他應用結合,因此使用的人也不少。

然而越來越多的公司發現,很多場景需要對流資料進行處理,流資料處理的價值也越來越高。如網路故障檢測、欺詐行為檢測等。這些問題使用流處理將有更高的價值。這就是Flink的機會。

Apache Flink是一個分散式處理引擎,用於對無界和有界資料流進行有狀態計算。 Flink設計為在所有常見的叢集環境中執行,以記憶體速度和任何規模執行計算。可以說,它為流處理而生。

Apache Spark和Apache Flink的主要差別就在於計算模型不同。Spark採用了微批處理模型,而Flink採用了基於操作符的連續流模型。

 

 

Flink 的基本資料模型是資料流,及事件(Event) 的序列。資料流作為資料的基本模型可能沒有表或者資料塊直觀熟悉,但是可以證明是完全等效的。流可以是無邊界的無限流,即一般意義上的流處理。也可以是有邊界的有限流,這樣就是批處理。

而Spark現在也提供了Structured Streaming Programming,目的也是要和Flink競爭,防止被踢出局。同樣的,有Spark的經驗,Flink也提供了多個基於統一框架的高層次元件。

 

由於流處理在應用的場景越來越多,而Flink在流處理上的優秀表現使得很多公司也開始採用這個計算引擎。由於Flink也提供了類似Spark的SQL/ML等元件,因此有人認為Flink是下一代大資料計算引擎。然而,隨著Spark在流上的處理,也未必見得Flink就能贏。從Google Trends上看二者的趨勢,Spark目前仍然遠比Flink受歡迎的多。其社群也更加活躍。但Flink的處理方式也有很多值得借鑑的地方。而且阿里巴巴也是Flink社群的活躍者,也在自己的業務上執行Flink,並做了一個基於Flink的Blink框架。值得大家嘗試。拋棄Spark?Flink會是下一代大資料計算引擎嗎?