Apache storm ApacheStorm:将流拆分为不同的分支

Apache storm ApacheStorm:将流拆分为不同的分支,apache-storm,apache-storm-topology,Apache Storm,Apache Storm Topology,我正在制作storm拓扑,我正在处理这种格式的字符串:“x-x-x-x”,其中x是一些数字。我希望字符串流在4个螺栓之间相等地分割 问题在于,对于以下代码,所有螺栓都会获取所有元组,而不是将每个元组发送给一个螺栓: builder.setSpout("digits-spout", new ReaderSpout()); builder.setBolt("level-1", new SomeBolt(1)).shuffleGrouping("digits-spout"); builder.setB

我正在制作storm拓扑,我正在处理这种格式的字符串:“x-x-x-x”,其中x是一些数字。我希望字符串流在4个螺栓之间相等地分割

问题在于,对于以下代码,所有螺栓都会获取所有元组,而不是将每个元组发送给一个螺栓:

builder.setSpout("digits-spout", new ReaderSpout());
builder.setBolt("level-1", new SomeBolt(1)).shuffleGrouping("digits-spout");
builder.setBolt("level-2", new SomeBolt(2)).shuffleGrouping("digits-spout");
builder.setBolt("level-3", new SomeBolt(3)).shuffleGrouping("digits-spout");
builder.setBolt("level-4", new SomeBolt(4)).shuffleGrouping("digits-spout");
正如你们所看到的,我用的是相同的螺栓,但不同的构件。
谢谢

根据我从你的问题中了解到的情况,我可以为你的问题提供一个额外的螺栓,如以下示例:

builder.setSpout("digits-spout", new ReaderSpout());

builder.setBolt("stringSplitterBoltName", new 
StringSplitterBolt(1)).shuffleGrouping("digits-spout");

builder.setBolt("level-1", new 
SomeBolt(1)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-2", new 
SomeBolt(2)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-3", new 
SomeBolt(3)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-4", new 
SomeBolt(4)).shuffleGrouping("stringSplitterBoltName");

根据我从您的问题中了解到的情况,我可以为您的问题提供一个额外的螺栓,如以下示例:

builder.setSpout("digits-spout", new ReaderSpout());

builder.setBolt("stringSplitterBoltName", new 
StringSplitterBolt(1)).shuffleGrouping("digits-spout");

builder.setBolt("level-1", new 
SomeBolt(1)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-2", new 
SomeBolt(2)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-3", new 
SomeBolt(3)).shuffleGrouping("stringSplitterBoltName");

builder.setBolt("level-4", new 
SomeBolt(4)).shuffleGrouping("stringSplitterBoltName");

如果希望螺栓具有不同的处理逻辑,可以只添加同一螺栓的4个任务。在这种情况下,您将在螺栓实例之间随机接收消息。您可以检查该螺栓中的字符串值,并采取适当的执行路径。您将避免对4个螺栓使用单独的代码库


或者,如果您希望字符串有单独的螺栓代码,请参考zackeriya的上述建议。

如果您希望螺栓具有不同的处理逻辑,您可以只添加同一螺栓的4个任务。在这种情况下,您将在螺栓实例之间随机接收消息。您可以检查该螺栓中的字符串值,并采取适当的执行路径。您将避免对4个螺栓使用单独的代码库


或者,如果您想为字符串使用单独的螺栓代码,请参考zackeriya的上述建议。

您是否尝试过FieldsGroup?您使用随机分组的具体原因是什么?fieldsGrouping将向相同的工作者发送相同的值。我想要的是4个不同的SomeBolt(i),0您尝试过字段分组吗?您使用随机分组的具体原因是什么?fieldsGrouping将向相同的工作者发送相同的值。我想要的是4个不同的SomeBolt(i),0