日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Storm tick 功能

發布時間:2024/8/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Storm tick 功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. tick的功能

Apache Storm中內置了一種定時機制——tick,它能夠讓任何bolt的所有task每隔一段時間(精確到秒級,用戶可以自定義)收到一個來自__systemd的__tick stream的tick tuple,bolt收到這樣的tuple后可以根據業務需求完成相應的處理。

2017-06-20 14:39:08.100 STDIO [INFO] 我是定時執行任務pipade,消息為:source: __system:-1, stream: __tick, id: {}, [10]

2. 在代碼中使用tick及其作用

在代碼中如需使用tick,可以參照下面的方式

2.1. 為指定bolt設置tick

希望某個bolt每隔一段時間做一些操作,那么可以將bolt繼承BaseBasicBolt/BaseRichBolt,并重寫getComponentConfiguration()方法。
在方法中設置Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS的值,單位是秒。

Config config=new Config(); config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);

getComponentConfiguration()是org.apache.storm.topology.IComponent接口中定義的方法,在該方法定義此Bolt特定的Config

@Override public Map<String, Object> getComponentConfiguration() {// TODO Auto-generated method stubConfig config=new Config();config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);return config; }

-這樣設置之后,此bolt的所有task都會每隔一段時間收到一個來自__systemd的__tick stream的tick tuple,因此execute()方法可以實現如下:

@Override public void execute(Tuple input) {// TODO Auto-generated method stubif (input.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID)|| input.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)) {this.outputCollector.ack(input);System.out.println("我是定時執行任務pipade,消息為:"+input.toString());return;}//收到正常的Tuple,正常處理邏輯... }

2.2. 為Topology全局設置tick

若希望Topology中的每個bolt都每隔一段時間做一些操作,那么可以定義一個Topology全局的tick,同樣是設置Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS的值:

//在main函數啟動中設置 Config conf = new Config(); conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10); StormSubmitter.submitTopology("wordcount-online", conf, builder.createTopology());

2.3. tick設置的優先級

與Linux中的環境變量的優先級類似,storm中的tick也有優先級,全局tick的優先級低于局部Bolt定義的tick,即兩個同時存在以局部為準,否則以全局為準。

這個參數的名字TOPOLOGY_TICK_TUPLE_FREQ_SECS具有一定的迷惑性,一眼看上去應該是Topology全局的,但實際上每個bolt也可以自己定義。

2.4. tick的精確度

Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS是精確到秒級的。例如某bolt設置 Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS為10s,理論上說bolt的每個task應該每個10s收到一個tick tuple。

實際測試發現,這個時間間隔的精確性是很高的,一般延遲(而不是提前)時間在1ms左右。測試環境:3臺虛擬機做supervisor,每臺配置:4Cpu、16G內存、千兆網卡。

3. storm tick的實現原理

在bolt中的getComponentConfiguration()定義了該bolt的特定的配置后,storm框架會在TopologyBuilder.setBolt()方法中調用bolt的getComponentConfiguration()方法,從而設置該bolt的配置。

調用路徑為:TopologyBuilder.setBolt()-> TopologyBuilder.initCommon()-> getComponentConfiguration()

注:當topologyDeactivate時,tick任務還是依然執行

總結

以上是生活随笔為你收集整理的Storm tick 功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。