我如何在Apache Storm中拆分流?

时间:2013-11-06 08:42:42

标签: apache-storm

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

2 个答案:

答案 0 :(得分:52)

如果您的情况需要,您可以使用不同的流,它不是真正的分裂,但您将具有很大的灵活性,例如,您可以将它用于基于内容的路由,例如:

您在bolt中声明了流:

@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");

答案 1 :(得分:2)

此处有两个选项:Stream Groups“直接分组”。根据您的要求,其中一个将为您服务。

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

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