【发布时间】:2015-03-05 17:00:23
【问题描述】:
我想在 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");
有没有更好的办法?
【问题讨论】:
-
您能否从 A4 生成一个元素,该元素将在 A1 中作为 spout 元组进行检查,而不是在 A2 中作为循环进行检查?或者,是对 A4 到 A2(不等于 A1 到 A2)进行的完全不同的操作吗?
-
对不起,我不明白这个问题。流中发生的事情是 a1、a2、a3 和 a4 正在按顺序处理一条消息。 a4 可能会定期接收来自下游的消息(我的图中未显示),然后它必须将其传递给 a2。
-
你应该记录这个案例,我觉得应该有更好的事情要做。恕我直言,您不应该在一个螺栓中“煎饼”问题。如果可能的话,最好将这种情况分开在另一个螺栓/流中。
标签: apache-storm