Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache storm 场在暴风雨中的特定流上分组_Apache Storm - Fatal编程技术网

Apache storm 场在暴风雨中的特定流上分组

Apache storm 场在暴风雨中的特定流上分组,apache-storm,Apache Storm,我可以看到,我们已经为Storm中的特定流提供了洗牌组合,如下所述: 但我有一个用例,我想对喷口发出的特定流进行字段分组 例如,SpoutWithStreams发出带有随机词的stream1,我希望myBolt1订阅此流,但我也希望myBolt1的特定实例接收相同的词,即我希望字段分组在stream1上 所以我想要的是这样的: builder.setBolt("myBolt1", new MyBolt1()).fieldsGrouping("boltWithStreams", "stream1"

我可以看到,我们已经为Storm中的特定流提供了洗牌组合,如下所述:

但我有一个用例,我想对喷口发出的特定流进行字段分组

例如,SpoutWithStreams发出带有随机词的stream1,我希望myBolt1订阅此流,但我也希望myBolt1的特定实例接收相同的词,即我希望字段分组在stream1

所以我想要的是这样的:

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

我不想为了场上的分组而有额外的插销。还有其他选择吗?

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

我猜你想在你的门闩中接收两个流,其中一个流是来自另一个门闩的洗牌组合,另一个流是来自喷口的场组合

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

builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("boltWithStreams", "stream1").fieldsGrouping("spout", "stream2", new Fields("field"));
然后在bolt中,您可以使用以下方法区分元组属于一个流还是另一个流:

if (tuple.getSourceStreamId().equals("stream1"){
    //do something
} else if (tuple.getSourceStreamId().equals("stream2"){
    //do something else
}

我不明白你想说什么“我不想为了场上的分组而有额外的插销”。。你能更详细地解释一下你想要完成什么吗?@MatthiasJ.Sax我在问题中添加了一个例子。希望它现在更有意义。我的意思是我可以有一个单独的螺栓订阅stream1,然后myBolt1可以使用FieldsGroup订阅该螺栓。我仍然不确定我是否得到它。然而,我得到的印象是,你有一些理解风暴是如何运作的。如果你的喷口发出随机单词,你想通过fieldGrouping接收这些单词,你可以通过fieldsGrouping订阅这个“随机流”。不需要发出分组流就可以使用fieldsGrouping(Storm将在内部处理所有事情,并重新分配数据)。我可以这样做,但我只向该流发出特定类型的单词。所有其他的句子和单词都被发送到另一个流中,用于不同类型的螺栓。我已经在storm上工作了很长一段时间了,所以我非常了解它。看来我的印象是错的。尽管如此,我仍然不明白你想要完成什么。谢谢你的回答。但这不是我想要的。我在这个问题上加了一个例子。希望它现在更有意义。我仍然不确定你需要完成什么。如果我理解正确,您希望执行一个“自循环”,并将一个字段分组从螺栓发送到自身(到同一螺栓的特定任务)。这可以使用如下类似的
BoltDeclarer
来完成:
BoltDeclarer bolt1=builder.setBolt(“myBolt1”,new myBolt1()).shufflegroup(“spouttwithstreams”,“stream1”);bolt1.字段分组(“myBolt1”、“stream1”、新字段(“字段”)
if (tuple.getSourceStreamId().equals("stream1"){
    //do something
} else if (tuple.getSourceStreamId().equals("stream2"){
    //do something else
}