Apache storm 我应该使用哪种方法来实现此Storm拓扑?

Apache storm 我应该使用哪种方法来实现此Storm拓扑?,apache-storm,Apache Storm,我想在Storm中实现以下拓扑: a1->a2->a3->a4 | | -<----<-- b1->b2->b3->b4 | | -<----<-- 然后继续以同样的方式实施第二个要求: builder.setBolt("a2", new A2(), 1).shuffleGrouping("a4", "stream1"); 有更好的方法吗?我看到您的实现的唯一问题

我想在Storm中实现以下拓扑:

a1->a2->a3->a4
    |        |
     -<----<--


b1->b2->b3->b4
    |        |
     -<----<--
然后继续以同样的方式实施第二个要求:

builder.setBolt("a2", new A2(), 1).shuffleGrouping("a4", "stream1"); 

有更好的方法吗?

我看到您的实现的唯一问题是您有2个A2实例,这是不必要的。你可以

builder.setBolt("a2", new A2(), 1)
       .shuffleGrouping("a1", new Fields("streamA") )
       .shuffleGrouping("a4", new Fields("stream1") );

我最终用directGrouping和不同的流来完成这项工作。所以有一个流从a1->a2->a3->a4,另一个流从a4->a2。通过这种方式,我可以确保在A组和B组之间没有元组传递。

您能从A4生成一个元素,该元素将被检查为A1中的喷口元组,而不是A2中的循环吗?或者,它是在A4到A2(不等于A1到A2)上进行的完全不同的操作吗?对不起,我不理解这个问题。流中发生的事情是a1、a2、a3和a4依次处理消息。a4可能会定期从下游收到一条消息(我的图表中没有显示),然后它必须传递给a2。你应该记录这个案例,我觉得应该有更好的办法。我认为你不应该一下子就“煎饼”了。如果可能,最好在另一个螺栓/流中分离这种情况。
builder.setBolt("a2", new A2(), 1)
       .shuffleGrouping("a1", new Fields("streamA") )
       .shuffleGrouping("a4", new Fields("stream1") );