28

我不明白如何在 Apache Storm 中拆分流。例如,我有螺栓 A,经过一些计算,它有 somevalue1、somevalue2 和 somevalue3。它想将 somevalue1 发送到 bolt B,将 somevalue2 发送到 bolt C,然后将 somevalue1,somevalue2 发送到 bolt D。我将如何在 Storm 中执行此操作?我将使用什么分组以及我的拓扑是什么样的?预先感谢您的帮助。

4

2 回答 2

56

如果您的情况需要,您可以使用不同的流,它并没有真正拆分,但是您将拥有很大的灵活性,例如,您可以将它用于从螺栓进行基于内容的路由:

您在螺栓中声明流:

@Override
public void declareOutputFields(final OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declareStream("stream1", new Fields("field1"));
    outputFieldsDeclarer.declareStream("stream2", new Fields("field1"));
}

您从所选流上的螺栓发出:

collector.emit("stream1", new Values("field1Value"));

您通过拓扑收听正确的流

builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("boltWithStreams", "stream1");
builder.setBolt("myBolt2", new MyBolt2()).shuffleGrouping("boltWithStreams", "stream2");
于 2013-11-08T07:19:10.297 回答
3

您在这里有两个选择:Stream Groups"Direct Grouping"。根据您的要求,其中之一将为您服务。

查看 WordCountTopology 示例项目,看看这是否是您正在寻找的。否则,“直接分组”将是一个更好的选择。

但同样,选择分组策略取决于您的要求。

于 2013-11-06T08:56:52.810 回答