【发布时间】: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