Storm和Spark Streaming框架對比

6x7d 9年前發布 | 49K 次閱讀 Spark 分布式/云計算/大數據

StormSpark Streaming兩個都是分布式流處理的開源框架。但是這兩者之間的區別還是很大的,正如你將要在下文看到的。

處理模型以及延遲

雖然兩框架都提供了可擴展性(scalability)和可容錯性(fault tolerance),但是它們的處理模型從根本上說是不一樣的。Storm可以實現亞秒級時延的處理,而每次只處理一條event,而Spark Streaming可以在一個短暫的時間窗口里面處理多條(batches)Event。所以說Storm可以實現亞秒級時延的處理,而Spark Streaming則有一定的時延。

容錯和數據保證

然而兩者的代價都是容錯時候的數據保證,Spark Streaming的容錯為有狀態的計算提供了更好的支持。在Storm中,每條記錄在系統的移動過程中都需要被標記跟蹤,所以Storm只能保證每條記錄最少被處理一次,但是允許從錯誤狀態恢復時被處理多次。這就意味著可變更的狀態可能被更新兩次從而導致結果不正確。

任一方面,Spark Streaming僅僅需要在批處理級別對記錄進行追蹤,所以他能保證每個批處理記錄僅僅被處理一次,即使是node節點掛掉。雖然說Storm的 Trident library可以保證一條記錄被處理一次,但是它依賴于事務更新狀態,而這個過程是很慢的,并且需要由用戶去實現。

實現和編程API

Storm主要是由Clojure語言實現,Spark Streaming是由Scala實現。如果你想看看這兩個框架是如何實現的或者你想自定義一些東西你就得記住這一點。Storm是由BackType和 推ter開發,而Spark Streaming是在UC Berkeley開發的。

Storm提供了Java API,同時也支持其他語言的API。 Spark Streaming支持Scala和Java語言(q其實也支持Python)。

批處理框架集成

Spark Streaming的一個很棒的特性就是它是在Spark框架上運行的。這樣你就可以想使用其他批處理代碼一樣來寫Spark Streaming程序,或者是在Spark中交互查詢。這就減少了單獨編寫流批量處理程序和歷史數據處理程序。

生產支持

Storm已經出現好多年了,而且自從2011年開始就在推ter內部生產環境中使用,還有其他一些公司。而Spark Streaming是一個新的項目,并且在2013年僅僅被Sharethrough使用(據作者了解)。

Storm是 Hortonworks Hadoop數據平臺中流處理的解決方案,而Spark Streaming出現在 MapR的分布式平臺和Cloudera的企業數據平臺中。除此之外,Databricks是為Spark提供技術支持的公司,包括了Spark Streaming。

雖然說兩者都可以在各自的集群框架中運行,但是Storm可以在Mesos上運行, 而Spark Streaming可以在YARN和Mesos上運行。

本文翻譯自:http://xinhstechblog.blogspot.com/2014/06/storm-vs-spark-streaming-side-by-side.html
本博客文章除特別聲明,全部都是原創!

尊重原創,轉載請注明: 轉載自過往記憶(http://www.iteblog.com/)

 本文由用戶 6x7d 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!