初識Storm

Storm的一些基本概念

  1. Topology:數據流串連起來多個計算單元的執行圖
  2. Tuple:數據傳輸的形式
  3. Stream:兩個計算單元(節點)之間的Tuples無界序列
  4. Spout:從數據源獲取數據,不處理數據
  5. Bolt:對數據進行轉換或者計算
  6. Parallism hit:設置建立Spout或者Bolt實例的線程數
  7. Exetutors:JVM的一個線程,他能在運行時作改變,以應對數據增加,好比增加 到與tasks數量一致
  8. Tasks:在一個executor裏面的Spouts或者Bolts實例,運行時很差改變,好比 fields grouping,hash的bolts數量變了,沒法找到以前的bolt
  9. Anchoring:把當前節點的tuple錨定到輸入的tuple樹上去,手動emit須要加上 tuple一塊兒
  10. Ack:事件被成功處理,outputCollector標記,Spout發現tuple被徹底處理 了,會調用這個方法
  11. Fail:分不一樣的狀況標記tuple處理失敗,會從新從Spout再走一遍流程,Spout 在fail的狀況會調用這個方法
  12. worker:每個worker process是一個JVM
  13. worker Node:一個worker Node有多個worker,他是一個物理機或者是虛擬 機器
  14. master:有且僅有一個;Nimbus:master節點運行的後臺,他發現一個worker node掛掉的時候,會自動重啓它;Supervisor:worker node運行的後臺,與Nimbus通訊經過Zookeeper

Storm的Grouping策略

  • Stream Grouping:數據如何在多個Spout實例和多個Bolt實例之間傳送
  • shuffle grouping:每一個bolt實例之間收到的tuple數量基本是一致的
  • fields grouping:同一個值的字段會被送到同一個bolt實例
  • global grouping:整個流的tuple都會進入同一個bolt實例【至關於只有1 個實例的shuffle grouping】

Storm的一些方法基本用途

  • BaseRichSpout:
declareOutputFields:定義傳送tuple中值的名字  
	open:鏈接數據源,獲取數據  
	nextTuple:當storm已經練接好數據源,它來發送數據到下游  
	SpoutOutputCollector:發送tuple,處理失敗的tuple  
複製代碼
  • BaseBasicBolt:自動錨定並ack,適用於單個tuple進來,單個tuple出去
exetute:處理上游tuple,併發送tuple到下游,一個bolt的實例,它的	
		execute方法每次只處理一個tuple  
	prepare:初始化時候用  
	BasicOutputCollector:發送tuple,處理失敗的tuple  
複製代碼
  • TopologyBuilder:定義Spout與Bolt之間的關係,以及流分組的方式
  • Config:作拓撲級別的配置
  • StormTopology:TopologyBuilder的產物,並提交到集羣
  • TickTuple:bolt級別設置定時觸發器,首先在config中設置Tick觸發時機,而後 經過tuple的streamId判斷是不是是Ticktuple.觸發的頻率storm會努力作 到預設值一致

Storm的重試

  1. 至多一次處理
    tuple處理成功就成功,失敗就失敗,不作任何處理,即不保證可用。spout不傳tuple就能夠了
  2. 至少一次處理
    每一個tuple必須處理成功至少一次,須要保證在spout,數據源,流錨定,tuple被ack或者fail
  3. 只處理一次
    每一個tuple一單被處理成功,不能再次被處理。須要考慮:A 處理的任務是單元化的,B記錄單元化任務處理的結果。同時A,B兩步操做必須是原子操做。在處理單元任務,若是單元任務非冪等,那麼再次重作至關於至多處理了一次【場景1】,因此單元任務處理必須得保證是冪等的。

BaseBasicBolt和BaseRichBolt的一些差別

  • baseBasicBolt:自動錨定。
    錨定的時機:執行emit方法的那一刻;
    ack:execute方法執行結束;
    fail:execute執行過程當中出現任何問題;
  • baseRichBolt: 須要編碼實現錨定ack和fail 。
    錨定操做:emit的時候添加tuple -> emit(tuple,new Values(..));
    ack:使用outputcollector.ack(tuple);
    fail:要重發須要本身發送保存好的數據

Storm中各個節點之間的關係

附錄

本文來自<Storm實戰>。推薦。這本書能夠基本理解storm。node

相關文章
相關標籤/搜索