我想在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");
有更好的方法吗?
答案 0 :(得分:0)
我看到你实现的唯一问题是你有2个A2实例,这是不必要的。你可以
builder.setBolt("a2", new A2(), 1)
.shuffleGrouping("a1", new Fields("streamA") )
.shuffleGrouping("a4", new Fields("stream1") );
答案 1 :(得分:0)
我最终使用directGrouping和不同的流进行此操作。因此,有一个流从a1-> a2-> a3-> a4,另一个流到a4-> a2。这样我就可以确保A组和B组之间没有元组传递。