一、首頁
源位址:http://storm.apache.org/
Apache Storm是免費開源的分布式實時計算系統。Storm能夠可靠的處理無界資料流,這就使它能夠實時處理一些Hadoop批處理的事情。Storm簡單,可以使用任何程式設計語言。
Storm可以用于很多方面:實時分析、線上機器學習、持續計算、分布式RPC、ETL等。Storm的速度很快:每秒鐘每個節點可以處理一百萬條元組;并且是可伸縮的、可容錯的,保證資料得到處理,同時易于搭建和操作。
Storm包含了你已在使用的隊列以及資料庫技術。Stormtopology可以以任意複雜的方式消耗資料流并處理這些資料流,同時在級聯處理之間重新劃分這些流。更多可以閱讀指導
二、Integrates
源位址:http://storm.apache.org/about/integrates.html
Storm可以和任意隊列化系統或者資料庫系統內建在一起。 Storm的spout抽象使得內建新隊列化系統變得很容易。例如:
1、Kestrel
2、RabbitMQ/AMQP
3、Kafka
4、JMS
5、Amazon Kinesis
同樣,內建storm與資料庫也很簡單。簡單的打開與資料庫的連接配接,就可以像你平時一樣讀寫。當需要時,storm可以應對并行處理、資料劃分、失敗重新開機等。
三、simple-api
源位址:http://storm.apache.org/about/simple-api.html
Storm API比較簡單并且易于利用。 當在Storm上程式設計時,你可以操縱并傳遞元組(tuples)流,元組是已經命名好的值清單。元組可以包含任意類型的對象,如果希望使用Storm不知道的類型,簡單的方式是可以通過注冊這種類型的序列化器的方式進行利用。
Storm隻有三種抽象: Spouts、bolts以及topologies。 Spout是計算中流的來源。通常spout從隊列化的broker中讀取資料:例如Kestrel、RabbitMQ、或者Kafka,但是spout也可以産生自己資料流或者從其他的地方(例如Twitter streaming API)讀取資料。Spout的實作可以相容大多數隊列化系統。
Bolt可以處理任意數量的輸入流,并且可以産生任意數量的新輸出流。大多數計算邏輯是在bolts中完成的,例如函數、過濾器、流合并、流聚合、連接配接資料庫以及其他業務。
Topology是由Spouts以及Bolts組成的網絡,網絡中的每一個節點都代表一個bolt,bolt既可能訂閱其他spout輸出流,也可能訂閱bolt的輸出流。Topology是任意複雜的多級流計算系統。一旦部署好,Topology可以無限運作下去。
Storm有一種本地模式:即Storm叢集是模拟的程序内方式。這對開發和測試很有用。storm指令行用戶端可以用來準備向實際叢集送出topology應用。
storm-starter項目包含topology例子,用來學習storm基本知識。更多介紹需要閱讀tutorial以及documentation。
四、Scalable
源位址:http://storm.apache.org/about/scalable.html
Storm topology天生可以并行處理,并且通過機器叢集運作。Topology不同的部分可以通過調整他們并行化進行個體的伸縮。“rebalance”指令可以調整飛速運作中topology的并行處理。
Storm天生的并行處理機制意味着它可以處理巨大吞吐量的消息,并且延遲很小。 Storm基準是:每個節點每秒鐘處理100萬條100位元組的消息,硬體環境是:
處理器: 2x Intel [email protected]
記憶體:24GB
五、Fault tolerant
源位址:http://storm.apache.org/about/fault-tolerant.html
Storm是可容錯的: 當worker死掉時,Storm将自動重新開機它們。 如果節點死掉了,worker将在另一個節點上重新開機。
Storm daemons(nimbus以及supervisor),設計為無狀态并且快速失敗的。是以,如果它們死掉了,它們會像什麼都沒發生一樣重新開機。這就意味着你可以使用kill -9殺掉Storm daemons,而不需要影響叢集或者topology的健康狀況。
Storm's 容錯性能的更多介紹在manual。
六、Guarantees data processing
源位址:http://storm.apache.org/about/guarantees-data-processing.html
Storm保證每一個tuple可以完全處理。 Storm's核心機制之一就是跟蹤tuple的血統來源,這就保證元組可以以極端有效的方式通過topology。更多介紹請閱讀這裡。
Storm's 基本抽象提供至少處理一次的保證,當使用隊列化系統時依然可以獲得這種保證。 消息隻有在處理失敗時才會重新處理。
使用Trident,這是基于Storm's 基本抽象的更高抽象,你可以擷取每一個處理準去的語義。
七、Use with any language
源位址:http://storm.apache.org/about/multi-language.html
Storm從一開始就被設計成可以使用任意程式設計語言。Storm核心是用來定義和送出topologies的Thrift定義。因為Thrif可以使用任何語言,topologies可以使用任何語言進行定義以及送出。
相似的, spouts以及bolts可以使用任何語言定義。non-JVM spouts以及bolts通過JSON-based協定與storm通信。可以選擇Ruby、Python、Javascript、Perl以及PHP實作這個協定。
storm-starter包含一個topology執行個體,是使用python實作的一個bolts。
八、Easy to deploy and operate
源位址:http://storm.apache.org/about/deployment.html
Storm 叢集易于搭建,需要少量設定和配置就可以運作。 Storm's 簡單配置适合産品開發。更多關于Storm cluster搭建的介紹請閱讀這裡。
如果你處在EC2上,storm-deploy項目可以通過抓取按鍵擷取提、配置、安裝storm叢集。
另外,一旦部署,storm易于操作。Storm設計魯棒性很強----叢集将保證運作數月或更久。
九、free-and-open-source
源位址:http://storm.apache.org/about/free-and-open-source.html
Apache Storm是免費并且開源的項目,遵守Apache條約-Version2.0,如今正在接受Apache Software Foundation(ASF)的孵化,由Apache孵化器贊助。
Storm擁有巨大并且正在擴大的生态圈,這其中包含了大量的庫以及工具,可以用來連接配接以下Storm包含的元件:
1、Spouts: 這些Spouts可以和隊列系統內建在一起,例如JMS、Kafka、Redispub/sub等等。
2、storm-state:為了管理計算中的大量記憶體狀态,可靠的方式是采取分布式系統長久運作的方式,而storm-state使得這一切變得容易。
3、資料庫內建:bolts可以內建多種資料庫:例如MongoDB、RDBMS's、Cassandra等。
4、其他雜項應用
Storm文檔包含了其他一些與Storm相關的項目,某些可能不在Apache名下。