Storm與Spark Streaming比較

banq發表於2014-08-05


Storm風暴和Spark Streaming火花流都是分散式流處理的開源框架。這裡將它們進行比較並指出它們的重要的區別。

處理模型,延遲
雖然這兩個框架都提供可擴充套件性和容錯性,它們根本的區別在於他們的處理模型。而Storm處理的是每次傳入的一個事件,而Spark Streaming是處理某個時間段視窗內的事件流。因此,Storm處理一個事件可以達到秒內的延遲,而Spark Streaming則有幾秒鐘的延遲。

容錯、資料保證
在容錯資料保證方面的權衡是,Spark Streaming提供了更好的支援容錯狀態計算。在Storm中,每個單獨的記錄當它透過系統時必須被跟蹤,所以Storm能夠至少保證每個記錄將被處理一次,但是在從錯誤中恢復過來時候允許出現重複記錄。這意味著可變狀態可能不正確地被更新兩次。

另一方面,Spark Streaming只需要在批級別進行跟蹤處理,因此可以有效地保證每個mini-batch將完全被處理一次,即便一個節點發生故障。(實際上,Storm的 Trident library庫也提供了完全一次處理。但是,它依賴於事務更新狀態,這比較慢,通常必須由使用者實現。)

簡而言之,如果你需要秒內的延遲,Storm是一個不錯的選擇,而且沒有資料丟失。如果你需要有狀態的計算,而且要完全保證每個事件只被處理一次,Spark Streaming則更好。Spark Streaming程式設計邏輯也可能更容易,因為它類似於批處理程式(Hadoop),特別是在你使用批次(儘管是很小的)時。

實現,程式設計api
Storm初次是由Clojure實現,而 Spark Streaming是使用Scala. 如果你想看看程式碼還是讓自己的定製時需要注意的地方,這樣以便發現每個系統是如何工作的。Storm是由BackType和Twitter開發; Spark Streaming是在加州大學伯克利分校開發的。

Storm 有一個Java API, 也支援其他語言,而Spark Streaming是以Scala程式設計,當然也支援Java

Spark Streaming一個好的特性是其執行在Spark上. 這樣你能夠你編寫批處理的同樣程式碼,這就不需要編寫單獨的程式碼來處理實時流資料和歷史資料。

產品支援
Storm已經發布幾年了,在Twitter從2011年執行至今,同時也有其他公司使用,而Spark Streaming是一個新的專案,它從2013年在Sharethrough有一個專案執行。

Hadoop支援
Storm是一個 Hortonworks Hadoop資料平臺上的流解決方案,而Spark Streaming有 MapR的版本還有Cloudera的企業資料平臺,Databricks也提供Spark支援。

叢集管理整合
儘管兩個系統都執行在它們自己的叢集上,Storm也能執行在Mesos, 而Spark Streaming能執行在YARN 和 Mesos上。




相關文章