java - Storm Bolt 中跨任务的变量

标签 java apache-storm

字段分组可以将具有某些字段的元组定向到同一任务。一个执行器可以包含多个任务。

如果我声明一个带有私有(private)变量整数的bolt来计算元组。

public static class CountBolt implements IRichBolt {
    OutputCollector _collector;
    private int count;

    public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
        _collector = collector;
        count = 0;
    }

    public void execute(Tuple tuple) {
        count = count + 1;
        _collector.ack(tuple);
    }

    public void cleanup() {
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
    }

    public Map getComponentConfiguration() {
        return null;
    }
}

此计数是否显示同一任务或同一执行器的输入总数?

最佳答案

计数将按每个任务进行。每个任务都有自己的 Spout/Bolt 类实例。

如果变量被声明为静态,则它将针对每个工作人员。 (不是每个执行器,因为一个工作线程可能运行同一个 Spout/Bolt 的多个执行器。)

关于java - Storm Bolt 中跨任务的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821060/

相关文章:

mongodb - Apache Storm和 bolt 将数据存储在管道中

java - 无法使用maven获取jar文件中的测试类

Java Map 按值排序

java - Storm 拓扑的 bolt 接收重复结果

apache-storm - 重新平衡后 Storm 任务状态会转移到新的执行器吗?

java - Storm 观察服务有什么吗?

elasticsearch - 如何从Elasticsearch过滤stromcrawler数据

java - 为什么建议在声明变量时使用尽可能窄的范围?

java - 没有继承可以实现多态吗?

java - 有没有办法使用 IBM websphere 在预定时间运行 jar