我怎样才能发射到多个流从同一螺栓在风暴三叉树?
我有一个螺栓,它做了一些计算,并根据结果,我想要传递一些值给一个流,另一些值给另一个流。
在Storm (不是三叉树)中,我们可以通过以下方式来实现:
将流拆分为多个流:
@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“,并运行相同的螺栓,只根据我想要发送到该流的内容进行发送;另一个选项是发送键和值对,并根据键(如type1、type2、error等)对流进行过滤。并再次创建多个流。但在我看来,它们都不是一个好的设计。实现这一目标的最佳方式是什么?
发布于 2016-02-12 01:42:55
阿费克你不能这么做。要拆分流,您需要执行以下操作:
// main stream
Stream stream = topology.each(...)
// stream 01
Stream stream1 = stream.each(...)
// stream 02
Stream stream2 = stream.each(...)https://stackoverflow.com/questions/33837705
复制相似问题