如何从 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 实现相同的行为呢?
一种选择是为同一个流调用“每个”并运行相同的螺栓,并且仅根据我想要向该流发出的内容发出,或者另一种选择是发出键和值对并根据键过滤流(如 type1, type2,错误等)并再次创建多个流。但在我看来,它们都不是一个好的设计。实现它的最佳方法是什么?