Storm是什么


Why use Storm?

Apache Storm是一個免費的開源的分布式實時計算系統。Storm使得可靠的實時處理無邊界的數據量變得很容易,就如同Hadoop做批處理那樣。Storm很簡單,可以用任意的編程語言。

Storm有許多使用案例:實時分析、在線機器學習、持續的計算、分布式RPC、ETL等等。Storm很快速:每個節點每秒鍾可以處理一百萬個元組。它是可伸縮的、容錯的,保證你的數據將會被處理,並且很容易操作。

Storm集成了隊列和數據庫技術。一個Storm拓撲結構以任意復雜的方式消費並處理數據流,在計算的每一個階段會重新分區數據流。

Concepts

Topologies

一個實時應用程序的邏輯被打包成一個Storm topology。Storm topology和MapReduce的Job很類似。一個最關鍵的不同在於,一個MapReduce的Job最終會結束,而一個topology是永遠運行的(除非你手動殺死它)。一個topology是一個由spouts和bolts以及將它們連接起來的stream grouping構成的圖。

Streams

Stream是Storm中的核心抽象。一個Stream是一個無邊界的元組序列。Stream是由元組中的命名字段被定義的。默認情況下,元組可以包含integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays。你也可以定義自己的序列化方式。

每一個Stream在被聲明的時候都會給定一個id。

Spouts

在一個topology中,spouts是流的來源。一般而言,spout從外部的源中讀取元組,並將其發送到topology中。Spout可以是可靠的,也可以是不可靠的。一個可靠的spout是如果在Storm中處理失敗的話它會重新放一個元組,而不可靠的spout在它發送這個元組以后就忘記它了。

Spouts可以發送到一個或者多個Stream。為了這樣做,在聲明多個stream的時候OutputFieldsDeclarer的declareStream方法。

Spout中的主要方法是nextTuple。nextTuple發送一個新的元組到topology中或者沒有新的元組的時候簡單的返回。另一個重要的方法是ack和fail。

Bolts

Topologies中的所有處理都是由Bolts來做的。Bolts可以做許多事情,比如:過濾、聚集、連接數據等等。

Bolts可以做簡單的流轉換,復雜的流轉換通常需要多步,因此也需要多個bolts。

當你聲明了一個bolt的輸入流的時候,你總是會訂閱來自其它組件的特別的流。如果你想訂閱所有組件的流,那么你必須一個一個的訂閱。

bolt的主要方法是execute

Stream groupings

一個stream grouping是定義流應該怎樣被分區到bolt的task中去。

  1. Shuffle grouping:元組被隨機分配到task中去,因此每個bolt可以保證獲得相等數量的元組
  2. Fields grouping:按特定的字段分區。例如,"user-id"相同的元組總是被分到相同的task中去
  3. Partial Key grouping:跟Fields grouping類似,只不過會考慮下游的bolts的負載均衡
  4. All grouping:流會被復制,並且分發給所有的bolt
  5. Global grouping:整個流只進入到一個bolt的task。特別的,將進入到id最小的那個task
  6. None grouping:你不關心怎么分組。等價於Shuffle grouping
  7. Direct grouping:元組的生產者決定哪些消費者任務可以收到這個元組
  8. Local or shuffle grouping:如果目標bolts在相同的worker中有一個或者多個task,元組將會被隨機分配到這些任務中

Reliability

Storm保證每個spout元組被完全處理。這是通過跟蹤由每個元組觸發的元組樹實現的

Tasks

每一個spout和bolt都執行很多tasks,每一個task對應執行的一個線程,stream grouping定義元組怎么從一個task到另一個task。

Workers

Topologies執行一個或多個worker進程。每個worker進程是一個物理的JVM。

 

參考 http://storm.apache.org/index.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM