是否有可能在Apache Storm中将不同的元组从1个喷口发送到不同的螺栓?例如,我有Spout A,需要将Buple B发送给Bolt C,将Tuple D发送给Bolt E.我应该如何使用Java中的spout实现它?我的意思是如何编写代码.
OutputCollector.emit(new Values(B, C))?
Run Code Online (Sandbox Code Playgroud)
fhu*_*ois 10
要从一个Spout向不同的螺栓发出元组,您可以使用命名流,如下所示:
喷口
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declareStream("streamA", new Fields("A"));
outputFieldsDeclarer.declareStream("streamB", new Fields("B"));
}
@Override
public void nextTuple() {
outputCollector.emit("streamA", new Values("A"));
outputCollector.emit("streamB", new Values("B"));
}
Run Code Online (Sandbox Code Playgroud)
然后,每个螺栓订阅一个特定的流:
builder.setBolt("MyBoltA", new BoltA()).shuffleGrouping("MySpout", "streamA");
builder.setBolt("MyBoltB", new BoltB()).shuffleGrouping("MySpout", "streamB");
Run Code Online (Sandbox Code Playgroud)
最后,如果一个bolt订阅了几个流,你可以使用以下方法来知道哪个流已经发出了一个元组:
tuple.getSourceStreamId()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2496 次 |
| 最近记录: |