Storm 和 Spark Streaming是構建與Hadoop之上的兩款優秀的實時流式計算框架,他們各自的特點如何,究竟那款框架適用於你的業務需求?也許本文可以給你一個參考:
原文連接:http://xinhstechblog.blogspot.com/2014/06/storm-vs-spark-streaming-side-by-side.html
Storm vs. Spark Streaming: 橫向對比
導言
Storm 和Spark Streaming兩者皆是用於分布流式(數據)處理的開源框架。但是通過橫向對比你將看到它們之間存在一些關鍵性區別。
處理模型,延遲
雖然兩個框架都具有可擴展性和容錯特性,但它們的處理模型有着本質區別。Storm會對每一次傳入處理請求的事件做出響應,而Spark Streaming會對較短時間間隔內的所有請求批量提交來進行一次性處理。因此Storm在處理傳入請求時延遲可縮短至次秒級,而Spark Streaming可能需要幾秒鍾的延遲。
容錯,數據保證
二者在容錯數據保證上做出了各自的權衡。Spark Streaming在容錯方面提供了對狀態計算的更好的支持。在Storm中,任一條單獨的記錄在經過系統時必須可以被追蹤到,所以Storm僅保證所有記錄都會至少處理一次,但是從錯誤中恢復過來時允許出現重復記錄。這意味着可變狀態有可能被錯誤的更新兩次。
Spark Streaming在另一方面,僅需要在處理級別時才進行操作追蹤,因此可以有效的保證每個小批量請求(mini-batch)都會被精確處理一次,即便某個節點發生了故障。(事實上,Storm的Trident library庫同樣提供了精准處理一次機制。但是它依賴於事物更新狀態,這比較慢,而且通常是由用戶去實現。)
Storm vs. Spark Streaming comparison. |
小結
簡而言之,如果你需要次秒級延遲並且數據無丟失,Storm是一個不錯的選擇。如果你需要狀態計算、每次傳入請求精准處理一次,那么Spark Streaming更勝一籌。Spark Streaming程序設計邏輯也許會更易於理解,因為它近似於批處理程序(譯者注:如Hadoop),尤其是在你使用批請求時(盡管是非常小的批次)。
實現,程序API
實現
Storm最初是由Clojure(譯者注:一種並行編程語言,語法風格類似於Lisp)實現的, Spark Streaming則是由Scala(譯者注:一種多范式編程語言,支持面向對象和函數式)。如果你想去閱讀代碼來看看系統如何工作的或者自己去定制一些東西,更要牢記它們的編程實現。Storm由BackType(譯者注:媒體分析公司,已被Twitter收購)和Twitter聯合開發的,Spark Streaming是UC Berkeley(譯者注:加州大學伯克利分校)開發的。
程序API
Storm提供一套Java API,同時可以很好的支持其它編程語言。Spark Streaming可以用Scala開發,當然也支持Java。(譯者注:Clojure和Scala兩種語言均可供JVM調用)
批處理框架集成
Spark Streaming有一個好的特性是它運行在Spark上。因此你可以使用相同(或者非常近似)的代碼去實現批處理操作,或者在Spark Streaming上對Spark進行交互查詢。這會減少用於處理流數據和歷史數據所需編寫的代碼。
Storm vs. Spark Streaming: implementation and programming API. |
小節
Spark Streaming的兩個優勢 (1)它不是用Clojure實現的(譯者注:更具通用性)
(2)它可以很好的與Spark批處理計算框架集成
產品,支持
產品使用
Storm已經發布幾年了,在Twitter上從2011年運行至今,現在也有很多其他公司在使用。相對的Spark Streaming是一個新項目,(據筆者所知的知名案例)僅在2013在Sharethrough(譯者注:國外知名的廣告視頻網站)上投入生產使用。
Hadoop分發及支持
Storm(僅支持這一個)是Hortonworks Hadoop data platform數據平台的流式計算解決方案。而Spark Streaming同時支持MapR's distribution和Cloudera's Enterprise data platform兩個Hadoop數據平台,並且還有Databricks(譯者注:Databricks是一家創始團隊背景顯赫的大數據開發公司,專注於Hadoop和Spark)這樣的重量級大數據公司提供支持。
集群管理集成
兩套系統均可以運行在它們自己的集群上,Storm仍然只能運行於Mesos上,Spark Streaming在YARN和Mesos上均可以運行。(譯者注:Storm也有一個可以運行在YARN上的第三方支持組件Storm on Yarn,但畢竟不是原生支持。)
Storm vs. Spark Streaming: production and support. |
小節
Storm的實際產品應用經驗要比Spark Streaming久得多,但是Spark Streaming有兩點優勢:(1)作為開源產品有一個重量級公司給予支持和貢獻技術力量;(2)原生適配YARN。