fields在Storm中的特定流上进行分组

时间:2016-02-19 11:57:08

标签: apache-storm

我可以看到我们已经为Storm中的特定流提供了shuffleGrouping,如下所述:How would I split a stream in Apache Storm?

builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("SpoutWithStreams", "stream1");

但我有一个用例,我希望在spout发出的特定流上有fieldsGrouping。

对于Eg。 SpoutWithStreams 使用随机单词发出 stream1 ,我希望 myBolt1 订阅此流,但我还想要 myBolt1的特定实例接收相同的字词,即我想在 stream1 上填写字段。

所以我想要的是这样的:

builder.setBolt("myBolt1", new MyBolt1()).fieldsGrouping("boltWithStreams", "stream1","field");

我不想为fieldsGrouping添加额外的螺栓。还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

由于没有明确定义的问题,我会猜测你的意思并尝试回答。

我猜你想要在你的螺栓中接收两个流,其中一个流是来自另一个螺栓的shuffleGrouping,另一个流是来自喷口的fieldsGrouping。

如果是这种情况,你可以这样做:

builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("boltWithStreams", "stream1").fieldsGrouping("spout", "stream2", new Fields("field"));

然后在你的螺栓中你可以使用:

来区分元组是属于一个流还是另一个流
if (tuple.getSourceStreamId().equals("stream1"){
    //do something
} else if (tuple.getSourceStreamId().equals("stream2"){
    //do something else
}