jstorm知識整理

最近在作一個jstorm的程序。個人jstorm程序消費一個kafka主題,根據數據邏輯判斷須要往下游哪幾個kafka主題的生產者發送。json

一、bolt的execute(Tuple input)方法每次接收一條,處理好對應的DTO的json數據的話須要將數據發送到下游kafka主題。我觀察到producer發送數據須要的時間比較多,通常發一次都要800毫秒。因此用了一個隊列ArrayBlockingQueue存儲固定數量批量發送。批量處理的條數不能太大,由於一次性發送到kafka的數據條數*單條數據大小不能超過限制,我公司設置的不能超過1MB;jvm

配置參數的計算公式:spout_pending*spout數量/ (bolt數量*批量處理條數) 等於1.2左右spa

二、spout數量和分區數一致,設大了沒有意義;線程

三、jstorm有一個系統自帶的發系統級別的tuple,只須要設置全局參數便可:orm

conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS,10); //表示每隔10秒storm會給Topology中的全部bolt發射一個系統級別的tuple隊列

在execute方法中能判斷是不是系統tuple:  StringUtils.equals(input.getSourceComponent(), "__system");進程

4、一個 workers 能夠理解爲一個jvm進程(也就是一個節點), task 理解爲運行任務的線程。task就是一個 spout 或者一個boltget

相關文章
相關標籤/搜索