我应该使用哪种方法来实现这个storm拓扑?

ipakzgxi  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(296)

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

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

b1->b2->b3->b4
    |        |
     -<----<--

注意,a1、b1和a2、b2等是相同的螺栓。有两个相同的流,但是在螺栓之间传递的元组必须保留在流中。还有一个从a4->a2,b4->b2的回路。
为了实现独立的流,我想到在streamid字段上使用fieldsgrouping,或者为每个流创建一个独立的streamid。后一种选择似乎更好,但我下面的实现似乎不雅。

builder.setBolt("a2", new A2(), 1).shuffleGrouping("a1", "streamA"); 
builder.setBolt("b2", new B2(), 1).shuffleGrouping("b1", "streamB");

然后以同样的方式继续执行第二个要求:

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

有更好的办法吗?

ufj5ltwl

ufj5ltwl1#

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

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

j2cgzkjk2#

最后我用directgrouping和不同的流来做这个。所以有一条流从a1->a2->a3->a4,另一条流从a4->a2。这样我就可以确保没有元组在a和b组之间传递。

相关问题