一分鐘了解Storm
來自:http://jvmplus.duapp.com/
這篇文章翻譯自Storm官方文檔,可以幫助以快速大致了解一下Storm
基礎部分
在過去的數十年中,數據處理領域有著重大的變革。MapReduce和Hadoop以及相關技術使得存儲和處理過去無法想象的規模的數據。不幸的是,這些數據處理技術并不是實時性的,也沒有把Hadoop改造成實時數據處理的系統;實時數據處理相對于普通的批處理有基本的不同和需求。
然而,實時的對大規模的數據處理已經是現代諸多業務迫切需要的了,缺少實時性的Hadoop日益成為實時處理生態的查克琉斯之踵。
這個時候,Storm來了。
在Storm之前,我們需要手工來構建一個網絡隊列和執行單元來進行實時處理。執行單元要處理隊列里面的消息,更新DB,然后將處理完的消息發送至其他隊列以供以后的處理。不幸的是,這種方式有嚴重的限制:
1,冗余:我們要花大部分的時間來配置消息的去向、部署執行單元、部署隊列之間的消息流動。這樣以來實時處理邏輯成為了我們所有工作的很小的一部分。
2,脆弱:容錯性很低,執行單元和隊列任務消息必須由我們自己保證。
3,可擴展性很差:當消息對于單一的執行單元和隊列累積過多的時候,我們就需要將數據分區處理。這個時候我們又需要重新配置新的執行單元和消息流向,而新的部分將有可能會失敗。
盡管隊列和執行單元對于大量消息處理的時候可能會失敗,消息處理顯然是實時計算的基礎部分。問題是:我們怎么樣草能做到不丟失數據,對大規模消息處理的時候擴展性好,并且容易操作呢?
Storm是用來干這事的。
為什么Storm是重要的
Storm提供了用于實時計算的一個集合的基元。類似于MapReduce大大簡化了并行批處理,Storm大大簡化了并行實時計算。
Storm的關鍵特性:
1,極其廣泛的應用范圍:Storm可以用來處理消息和更新DB(流式處理),對數據流的持續查詢然后將結果數據流返回給客戶端(持續計算),并行處理巨大的查詢(分布式RPC),Storm的這些特性滿足很多種應用場景。
2,可伸縮性:Storm擴展起來可以每秒處理大量的消息。擴展成為拓撲結構,我們需要做的只是增加機器,增加拓撲結構的并行機制配置。一個Storm擴展的例子,初始的時候應用有 10個節點,每秒能夠處理100萬個消息,包括拓撲結構每秒數百次的DB操作。Storm借助ZK對集群進行協調,使得擴展集群的大小很容易。
3,保證無數據丟失:一個實時系統必須要保證數據消息被成功的處理。對于刪除數據的系統來說應用范圍比較窄。Storm保證每個消息都被處理,這個可以和S4系統進行對比。
4,極其健壯:不像Hadoop系統,難以管理這點是臭名昭著的,而Storm不是這樣的,它可以很好的工作。為了能夠讓Storm項目對于用戶來說有更好的用戶體驗,這也是Storm致力于做的一點。
5,容錯性:如果在執行計算的時候出現錯誤,Storm將會重新調度任務,Storm可以保證計算一直進行,除非我們將它kill掉。
6,支持語言多:強健和易伸縮實時處理系統不應該受限于平臺。Storm拓撲和處理組件可以使用任何語言來定義和操作。