簡體   English   中英

在 Storm Bolt 中創建計數器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM