storm翻譯(2):Concepts

Concepts:概念

原文:http://storm.apache.org/documentation/Concepts.html html

這個列表展現了storm中的主要概念和相關詳細信息。這些概念是:java

  1. Topologies數據庫

  2. Streamsapache

  3. Spoutsapi

  4. Bolts安全

  5. Stream groupings異步

  6. Reliability分佈式

  7. Tasksui

  8. Worksspa

     

Topologies

實時處理邏輯被包含在一個storm topology中。一個storm topology MapReduce job類似。其中一個關鍵不一樣是MapReduce job最終會中止,可是topology會一直運行(除非你kill它)。一個topology是一系列經過數據流鏈接起來的spoutbolt。下面將描述這些概念。

 

更多資源:

 

Streams

Streamstorm的核心抽象。Stream是經過分佈式方式平行創造出的一個無限制的tuples隊列。Stream要爲tuples中的fields(屬性)命名。在默認狀況下,tuples中能夠有integerslongsshortsbytesStringsdoublesfloatsbooleansbyte arrays。固然,你也能夠在tuples中使用自定義序列化(serializers)類型。

每個Stream在聲明時都會給一個id。由於單一流的spoutsbolts很是常見,OutputFieldsDeclarer有很是方便的方法聲明一個沒有指定id的流。在這種狀況下,這個流被給定了一個默認id:「default

 

更多資源:

Spouts

Spoutstorm中流的源頭。一般的spouts從外部數據源中讀取數據而後向topology中發射。Spout分爲可重發(reliable)和非可重發(unreliable)兩種。一個可重發的spout會在storm處理失敗後再次發送處理失敗的tuple,而非可重發的spout在發射完一個tuple以後就再也不關注後續處理。

Spout能夠發射多條Stream。可使用OutputFieldsDeclarer中的declareStream方法聲明多個Stream,並在使用時經過SpoutOutputCollectoremit方法發射數據

Spout中最主要的方法是nextTuplenextTuple能夠向topology發射數據或在沒有數據要發射的時候返回。在spout實現類中沒有必要給nextTuple加鎖,由於storm會在同一個線程中調用全部的spout方法。

其餘兩個重要的方法是ackfail。當storm發現從spout發射出的tuple在整個topology過程當中處理成功或失敗時,會調用響應的ackfail方法。只有在可重發的spout中才會調用ackfail方法。

 

更多資源:

Bolts

Topologies中的全部處理過程都是在bolts中完成的。Bolts經過過濾(filtering)、方法(function)、聚合(aggregation)、鏈接(joins)、訪問數據庫等方式作任意數據操做。

Bolts能夠作簡單的Stream轉換。可是作複雜的Stream轉換須要在更多的bolt中執行多個步驟。舉例來講:講一個tweet Stream轉換爲一個熱門圖片Stream至少須要兩個步驟:一個bolt統計每一個圖片的關注者(retweets),另外一個bolt算出前幾名的圖片(你能夠用更加可拓展的方式處理這個數據Stream轉換,好比使用3bolt

bolts能夠發射多條Stream。可使用OutputFieldsDeclarer中的declareStream方法聲明多個Stream,並在使用時經過SpoutOutputCollectoremit方法發射數據

當你在bolt中聲明瞭一個輸入Stream,就意味着bolt從另外一個組件(component)上訂閱了一個特定的Stream。若是你但願訂閱另外一個組件上的全部流,須要分別聲明訂閱。InputDeclarer提供了一個經過默認Stream id訂閱流的方法。好比declarer.shuffleGrouping("1")表示你從組件1上訂閱了默認流,至關於declarer.shuffleGrouping("1", DEFAULT_STREAM_ID).

Bolt中的主方法是execute,每從輸入Stream中讀取數據時會調用它。Bolts經過OutputCollector發射新的tuplesBolts須要在OutputCollector發射每一個tuple完成以後調用ack方法,以便於storm知道tuple何時完成(能夠最終確認原始spout發射的tuple是處理成功的)。一般狀況下,tuple每處理一個輸入tuple,會在輸入tuple的基礎上發射0或多個tuples,而後ack輸入tuplestorm提供了一個接口IBasicBolt能夠自動的調用ack方法。

bolts中啓動多個線程進行異步處理數據是一個完美的方法。OutputCollector是線程安全的,而且能夠隨時調用。

 

更多資料:

Stream groupingssteam 組操做)

定義在topology中,每一個bolt選擇哪一個Stream做爲輸入。一個Stream grouping定義了Stream在多個bolt’s tasks中如何分配。

storm中有7種內置的Stream grouping方式,你能夠經過實現CustomStreamGrouping接口來建立本身的Stream grouping

  1. Shuffle grouping: Tuples被隨機分配到每個bolt’s task,以便於每個bolt’s task得到相同數量的tuples

  2. Fields grouping: Stream被根據屬性(fields)進行分組。舉例:若是一個Stream根據「user-id」分組,具備相同「user-id」屬性的tuples會被髮往同一個bolt’s task,具備不一樣「user-id」的tuples有可能發往不一樣的bolt’s task

  3. All groupingStream會被重複的發往每個bolt’s task,使用這個方式須要慎重。

  4. Global grouping輸入流會發往bolt’s tasks中的一個。具體來講,會發往最小idtask

  5. None grouping:這種方式表示你並不關心Stream如何分組。當前版本中,它的效果等同於shuffle groupingEventually though, Storm will push down bolts with none groupings to execute in the same thread as the bolt or spout they subscribe from (when possible).

  6. Direct grouping:這是一個特殊的grouping。這種方式可讓tuple的生產者決定消費者中哪個task可以接收這個tuple。只有當一個Stream聲明是一個direct stream時,Direct grouping方式才能生效。必須使用[emitDirect](/apidocs/backtype/storm/task/OutputCollector.html#emitDirect(int, int, java.util.List)方法,才能將tuple發送到一個direct Stream中。一個bolt能夠經過兩種方式獲取到消費者的taskid,一種是使用TopologyContext獲取,另外一種是經過跟蹤OutputCollector中的emit方法的返回值(當tuples發送以後,會返回task ids

  7. Local or shuffle grouping:若是目標bolt在一個worker進程中有多個或一個taskstuples會隨機發送到進程內的tasks。不然,這種方式與shuffle grouping相同。

     

相關資料

TopologyBuilder:用來建立topology的類

InputDeclarer:這個對象在調用TopologyBuilder類的setBolt方法時返回,用來聲明一個bolt的輸入Stream和這些Stream用什麼樣的grouping方式。

CoordinatedBolt:這個bolt用於分佈式RPC topologies,並大量使用direct Streamdirect groupings

Reliability

Storm確保沒有個spout發出的tuple將會被topology完整的處理。經過創建一顆樹來跟蹤spout發出的每個tuple,並且決定tuple有多長時間處理完畢。每個topology有一個「message timeout」配置這個時間。若是storm發現tuple在這個時間內沒有完成這棵樹,那麼這個tuple就是fail,並從新處理這個tuple

爲了很好的利用storm的可靠性機制,你必須告知storm何時在監控樹上建立了一個新的路徑,並在何時完成了一個tuple的處理。這些在bolts使用OutputCollector發送完tuple時要作的。在肯定完成了emit方法以後,必須調用ack方法來告知處理了這個tuple

更多信息在Guaranteeing message processing.

Tasks

每個spoutbolt在集羣中運行多個tasks。每個task至關於程序中的一個線程,Stream grouping定義瞭如何將tuples從一個task集合到另外一個task集合。你能夠爲每個spoutbolt在類中TopologyBuildersetSpoutsetBolt方法設置平行度(parallelism)。

Workers

Topologies執行一個或多個worker進程。每一個worker進程是一個運行task子集的物理虛擬機。舉例:若是一個topology一共有300tasks50workers,那麼每個worker執行6tasksStorm嘗試將tasks平均的分配到每個worker

相關資料:

Config.TOPOLOGY_WORKERS:執行topologyworker數量

相關文章
相關標籤/搜索