【问题标题】:Create counter in Storm Bolt在 Storm Bolt 中创建计数器
【发布时间】:2022-08-04 00:07:52
【问题描述】:

我试图创建一个计数器并计算我在螺栓中收到元组的次数。但是在这样做之后,:

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 知识仍然不是高级水平,所以有什么合适的方法可以做到这一点吗?

    标签: java counter apache-storm


    【解决方案1】:

    从拓扑中获取度量的正确方法是创建度量消费者,它从拓扑的所有 Spout 和 Bolt 中收集以编程方式定义的统计信息。 看看docs中的描述。 是的,您需要一些东西来存储您的 +1 数据,例如 Redis、MySQL 等。 如果您不是经验丰富的程序员,请查看使用 Storm 的出色项目,例如 StromCrawler。这是一个很酷的例子,说明如何创建自己的metrics consumer for storing them in Mysql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多