【发布时间】:2018-03-28 17:23:30
【问题描述】:
我有两个 Bolt 类 BoltX 和 BoltY。 BoltY 接收来自 BoltX 的元组。 BoltX 声明输出有多个字段,每个元组包含 4 个字符串:
class BoltX implements IBasicBolt {
...
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("A","B","C","D"));
}
}
在BoltY:
class BoltX implements IBasicBolt {
boolean hasReceive = false;
String A = null;
String B = null;
...
public void execute(Tuple input, BasicOutputCollector collector) {
if (!hasReceive) {
hasReceive = true;
A = input.getString(0);
B = input.getString(1);
}
if (!input.getString(0).equals(A) || !input.getString(1).equals(B)) {
LOG.error("group error");
return;
}
...
}
...
}
在拓扑中:
...
builder.setBolt("x", new BoltX(), 3);
builder.setBolt("y", new Bolty(), 3).fieldsGrouping("x", new Fields("A", "B"));
...
我认为 x 具有相同字段“A”和“B”的输出将用于 BoltY 的相同任务。
但是,拓扑日志显示很多“组错误”。
那么如何将具有相同字段“A”和“B”的输出分组到BoltY的相同任务?
【问题讨论】:
-
这里正确解释了字段分组:nrecursions.blogspot.in/2016/09/…
标签: java apache-storm