2018和2019年是大數據領域蓬勃發展的兩年,自2019年伊始,實時流計算技術開始步入普通開發者視線,各大公司都在竭盡全力地試用新的流計算框架,實時流計算引擎Spark Streaming、Kafka Streaming、Beam和Flink持續火爆。html
最近Spark社區,來自Databricks、NVIDIA、Google以及阿里巴巴的工程師們正在爲Apache Spark 3.0添加原生的GPU調度支持,參考(SPARK-24615和SPARK-24579)該方案將填補了Spark在GPU資源的任務調度方面的空白,極大擴展了Spark在深度學習、信號處理的應用場景。數據庫
與此同時,2019年1月底,阿里巴巴內部版本Blink正式開源!一石激起千層浪,Blink開源的消息馬上刷爆朋友圈,整個大數據計算領域一直以來由Spark獨領風騷,瞬間成爲兩強爭霸的時代。那麼將來Spark和Blink的發展會碰撞出什麼樣的火花?誰會成爲大數據實時計算領域最亮的那顆星?apache
咱們接下來看看Spark和Flink各自的優劣和主要區別。編程
Spark的數據模型是彈性分佈式數據集 RDD(Resilient Distributed Dattsets),這個內存數據結構使得spark能夠經過固定內存作大批量計算。初期的Spark Streaming是經過將數據流轉成批(micro-batches),即收集一段時間(time-window)內到達的全部數據,並在其上進行常規批處,因此嚴格意義上,還不能算做流式處理。可是Spark從2.x版本開始推出基於 Continuous Processing Mode的 Structured Streaming,支持按事件時間處理和端到端的一致性,可是在功能上還有一些缺陷,好比對端到端的exactly-once語義的支持。網絡
Flink是統一的流和批處理框架,基本數據模型是數據流,以及事件(Event)的序列,Flink從設計之初秉持了一個觀點:批是流的特例。每一條數據均可以出發計算邏輯,那麼Flink的流特性已經在延遲方面佔得自然優點。數據結構
Flink還提供了一個獨特的概念叫作有狀態的計算,它被用來處理一種狀況:數據的處理和以前處理過的數據或者事件有關聯。好比,在作聚合操做的時候,一個批次的數據聚合的結果依賴於以前處理過的批次。早期的Spark用戶會常常受此類問題所困擾,直到Structured Streaming的出現才得已解決。框架
Flink從一開始就引入了state的概念來處理這種問題。爲狀態計算提供了一個通用的解決方案。機器學習
在大數據領域,任何一個項目的火爆都被離不開完善的技術棧,Spark和Flink都基於對底層數據和計算調度的高度抽象的內核上開發出了批處理,流處理,結構化數據,圖數據,機器學習等不一樣套件,完成對絕大多數數據分析領域的場景的支持,意圖統一數據分析領域。分佈式
Flink和Spark都是由Scla和Java混合編程實現,Spark的核心邏輯由Scala完成,而Flink的主要核心邏輯由Java完成。在對第三方語言的支持上,Spark支持的更爲普遍,Spark幾乎完美的支持Scala,Java,Python,R語言編程。學習
與此同時,Flink&Spark官方都支持與存儲系統如HDFS,S3的集成,資源管理/調度 Yarn,Mesos,K8s等集成,數據庫Hbase,Cassandra,消息系統Amazon,Kinesis,Kafka等。
在最近的Spark+AI峯會上,Databricks公司推出了本身的統一分析平臺(Unified Analytics Platform),目標是使戶在一個系統裏解決儘量多的數據需求。Flink的目標和Spark一致,包含AI的統一平臺也是Flink的發展方向,從技術上來看,Flink是徹底有能力支持對機器學習和深度學習的集成,但目前來看,Flink仍有很長的路要走。
2018年是機器學習和深度學習元年,ML在數據處理領域佔比愈來愈重。Spark和Flink在作好實時計算的同時,誰能把握住此次機會就能夠在將來的發展中佔得先機。另外隨着5G的發展,網絡傳輸再也不是瓶頸之時,IOT的爆發式發展也將會是實時計算需求爆發之時,屆時Flink在流式計算中的自然優點將發揮的淋漓盡致,Blink的開源和阿里巴巴對Blink的加持無疑 又給Flink將來的發展注入一針強心劑。
Spark和Flink發展至今,基本上已是實時計算領域的事實標準。二者在易用性和生態系統建設上都投入了大量的資源,是如今和將來一段時間內大數據領域最有有力的競爭者。兩者的發展是競爭中伴隨着互相促進,在與機器學習集成和統一處理平臺的建設上雙方各有優劣,誰能儘早補齊短板就會在將來的發展中佔得優點。對於普通大數據領域的開發者而言,當下也是最好的時代,能夠見證兩大數據引擎的蓬勃發展,除了學習別無選擇,這未嘗不是是一種幸運?