[英]Create counter in Storm Bolt
我試圖創建一個計數器並計算我在螺栓中收到元組的次數。 但是在這樣做之后,:
public class CounterBolt extends BaseRichBolt {
OutputCollector outputCollector;
int count;
@Override
public void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector) {
outputCollector = collector;
}
@Override
public void execute(Tuple tuple) {
if (tuple.getSourceStreamId().equals("GotResult")) {
count++;
} else
System.out.println(count); //check count
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {}
我意識到count
將變為 0,因為每次在 Storm 拓撲中都會創建CounterBolt
的新實例。
我能想到的一種方法是使用外部存儲來執行此操作,可能使用數據庫或消息代理(如 Redis)來存儲計數器。 我的 Java 知識還不是高級水平,所以有什么合適的方法可以做到這一點嗎?
從拓撲中獲取度量的正確方法是創建度量消費者,它從拓撲的所有 Spout 和 Bolt 中收集以編程方式定義的統計信息。 看看文檔中的描述。 是的,您需要一些東西來存儲您的 +1 數據,例如 Redis、MySQL 等。如果您不是經驗豐富的程序員,請查看使用 Storm 的偉大項目,例如StromCrawler 。 這是一個很酷的示例,說明如何創建自己的指標使用者以將它們存儲在 Mysql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.