Storm為分布式實時計算提供了一組通用原語,可被用于“流處理”之中,實時處理消息并更新資料庫。這是管理隊列及工作者叢集的另一種方式。 Storm也可被用于“連續計算”(continuous computation),對資料流做連續查詢,在計算時就将結果以流的形式輸出給使用者。它還可被用于“分布式RPC”,以并行的方式運作昂貴的運算。 Storm的主工程師Nathan Marz表示:
Storm的主要特點如下:
可以使用各種程式設計語言。你可以在Storm之上使用各種程式設計語言。預設支援Clojure、Java、Ruby和Python。要增加對其他語言的支援,隻需實作一個簡單的Storm通信協定即可。
容錯性。Storm會管理工作程序和節點的故障。
水準擴充。計算是在多個線程、程序和伺服器之間并行進行的。
可靠的消息處理。Storm保證每個消息至少能得到一次完整處理。任務失敗時,它會負責從消息源重試消息。
快速。系統的設計保證了消息能得到快速的處理,使用ØMQ作為其底層消息隊列。
本地模式。Storm有一個“本地模式”,可以在處理過程中完全模拟Storm叢集。這讓你可以快速進行開發和單元測試。
Storm的術語包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被處理的資料。Sprout是資料源。Bolt處理資料。Task是運作于Spout或Bolt中的 線程。Worker是運作這些線程的程序。Stream Grouping規定了Bolt接收什麼東西作為輸入資料。資料可以随機配置設定(術語為Shuffle),或者根據字段值配置設定(術語為Fields),或者 廣播(術語為All),或者總是發給一個Task(術語為Global),也可以不關心該資料(術語為None),或者由自定義邏輯來決定(術語為 Direct)。Topology是由Stream Grouping連接配接起來的Spout和Bolt節點網絡。在Storm Concepts頁面裡對這些術語有更詳細的描述。
可以和Storm相提并論的系統有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。兩者最大的差別在于Storm會保證消息得到處理。這些系統中有的擁有内建資料存儲層,這是Storm所沒有的,如果需要持久化,可以使用一個類似于Cassandra或Riak這樣的外部資料庫。
入門的最佳途徑是閱讀GitHub上的官方《Storm Tutorial》。 其中讨論了多種Storm概念和抽象,提供了範例代碼以便你可以運作一個Storm Topology。開發過程中,可以用本地模式來運作Storm,這樣就能在本地開發,在程序中測試Topology。一切就緒後,以遠端模式運作 Storm,送出用于在叢集中運作的Topology。
要運作Storm叢集,你需要Apache Zookeeper、ØMQ、JZMQ、Java 6和Python 2.6.6。ZooKeeper用于管理叢集中的不同元件,ØMQ是内部消息系統,JZMQ是ØMQ的Java Binding。有個名為storm-deploy的子項目,可以在AWS上一鍵部署Storm叢集。關于詳細的步驟,可以閱讀Storm Wiki上的《Setting up a Storm cluster》。