1. 程式人生 > >storm定時任務使用例項

storm定時任務使用例項

1.背景

需要在bolt中定時執行某些操作

2.方法

都是利用系統自帶的定時tuple來完成,相當於系統自動發一個帶有特殊標記的tuple,然後自己在bolt中判斷,若為此特殊tuple,執行定時函式。 (1)如果所有bolt都需要定時,可在topology入口處通過config設定 (2)如果只有某一類bolt需要定時,可在該bolt內部override getComponetConfiguration方法設定

3.實現

(1)在topology入口處 [java]
  view plain  copy
  1. conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 60);// 設定本Bolt定時發射資料  
在各個bolt中使用下面程式碼判斷是否是觸發定時 [java]  view plain  copy
  1. tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID)  

(2)bolt內部 [java]  view plain  copy
  1. @Override  
  2. public Map<String, Object> getComponentConfiguration() {  
  3.     // configure how often a tick tuple will be sent to ParseBolt
      
  4.     Config conf = new Config();  
  5.     conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, TOPOLOGY_TICK_TUPLE_FREQ_SECS);  
  6.     return conf;  
  7. }  

執行函式內: [java]  view plain  copy
  1. public void execute(Tuple tuple, BasicOutputCollector basicOutputCollector) {  
  2.       
  3.     if (tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID) &&  
  4.             tuple.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)) {  
  5.         //some things to do   
  6.         return;  
  7.     }  
  8. }  

4.注意事項

(1)一定注意區分自己的需求是第一種還是第二種 (2)接到定時tuple並處理後,記得執行return;