如何从风暴三叉戟中的同一个螺栓发射到多个流?
我有一个螺栓做一些计算,并根据结果,我想传递一些值到一个流,一些其他值到另一个流。
在风暴(不是三叉戟)中,我们可以通过以下方式实现:
将流拆分为多个流:
@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");
那么,我如何才能实现同样的行为使用风暴三叉戟?
一个选项是为同一个流调用“each”,并运行相同的bolt,仅基于我要向该流发出的内容发出,或者另一个选项是emit key and value pair,并基于key(如type1、type2、error等)过滤流,然后再次创建多个流。但在我看来,没有一个是好的设计。实现这一目标的最佳方式是什么?
1条答案
按热度按时间zf2sa74q1#
阿飞,你不能那样做。要分割流,需要执行以下操作: