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上. 這樣你可以你編寫批處理的一樣代碼,這就不須要編寫單獨的代碼來處理實時流數據和歷史數據。html