Apache风暴:分裂成不同的螺栓流

qco9c6ql  于 2021-06-24  发布在  Storm
关注(0)|答案(2)|浏览(333)

我制作了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");

正如你所看到的,我使用相同的螺栓,但不同的constructor。谢谢!

50few1ms

50few1ms1#

如果希望螺栓具有不同的处理逻辑,只需为同一螺栓添加4个任务即可。在这种情况下,您将在bolt示例之间随机接收消息。您可以检查该螺栓中的字符串值,并采用适当的执行路径。您将避免对4个螺栓使用单独的代码库。
或者,如果您想为字符串使用单独的bolt代码,请参考zackeriya的上述建议。

piwo6bdm

piwo6bdm2#

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

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");

相关问题