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

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

我制作了storm拓扑,处理的字符串格式是:“x-x-x-x”,其中x是一些数字。我希望字符串流被分成4个螺栓相等。
问题是,对于以下代码,所有螺栓都会获取所有元组,而不是将每个元组只发送给一个螺栓:

  1. builder.setSpout("digits-spout", new ReaderSpout());
  2. builder.setBolt("level-1", new SomeBolt(1)).shuffleGrouping("digits-spout");
  3. builder.setBolt("level-2", new SomeBolt(2)).shuffleGrouping("digits-spout");
  4. builder.setBolt("level-3", new SomeBolt(3)).shuffleGrouping("digits-spout");
  5. builder.setBolt("level-4", new SomeBolt(4)).shuffleGrouping("digits-spout");

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

50few1ms

50few1ms1#

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

piwo6bdm

piwo6bdm2#

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

  1. builder.setSpout("digits-spout", new ReaderSpout());
  2. builder.setBolt("stringSplitterBoltName", new
  3. StringSplitterBolt(1)).shuffleGrouping("digits-spout");
  4. builder.setBolt("level-1", new
  5. SomeBolt(1)).shuffleGrouping("stringSplitterBoltName");
  6. builder.setBolt("level-2", new
  7. SomeBolt(2)).shuffleGrouping("stringSplitterBoltName");
  8. builder.setBolt("level-3", new
  9. SomeBolt(3)).shuffleGrouping("stringSplitterBoltName");
  10. builder.setBolt("level-4", new
  11. SomeBolt(4)).shuffleGrouping("stringSplitterBoltName");
展开查看全部

相关问题