如何在Storm Trident中从同一个螺栓发射多个流?
我有一个螺栓可以进行一些计算,根据结果我想将一些值传递给一个流,并将一些其他值传递给另一个流。
在Storm(不是Trident)中,我们可以通过以下方式实现这一目标:
将流拆分为多个流:
@Override
public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declareStream("type1-stream", new Fields("type1"));
outputFieldsDeclarer.declareStream("type2-stream", new Fields("type2"));
outputFieldsDeclarer.declareStream("error-stream", new Fields("error"));
}
然后根据调查结果发出,如:
collector.emit("type1-stream", new Values("type 1 data"));
collector.emit("type2-stream", new Values("type 2 data"));
collector.emit("error-stream", new Values("error data"));
然后通过收听预期的流来完成剩下的工作:
builder.setBolt("errorBolt", errorBolt).shuffleGrouping("errorBoltStream", "error-stream");
builder.setBolt("type1Bolt", type1Bolt).shuffleGrouping("type1BoltStream", "type1-stream");
那么如何使用Storm Trident实现相同的行为?
一个选项是为同一个流调用“each”并运行相同的bolt并根据我想要发送到该流的内容发出,或者另一个选项将发出键和值对并根据键过滤流(像type1,type2,error等)并再次创建多个流。但在我看来,没有一个好的设计。实现它的最佳方法是什么?
答案 0 :(得分:0)
AFAIK,你不能这样做。 要拆分流,您需要执行以下操作:
// main stream
Stream stream = topology.each(...)
// stream 01
Stream stream1 = stream.each(...)
// stream 02
Stream stream2 = stream.each(...)