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上。html