我如何在Apache Storm中拆分流?

jam*_*mes 28 apache-storm

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

zen*_*eni 53

如果你的情况需要,你可以使用不同的流,它不是真的分裂,但你会有很大的灵活性,你可以使用它来实现基于内容的路由,例如:

您在bolt中声明了流:

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

您从所选流的螺栓中发射:

collector.emit("stream1", new Values("field1Value"));
Run Code Online (Sandbox Code Playgroud)

您可以通过拓扑侦听正确的流

builder.setBolt("myBolt1", new MyBolt1()).shuffleGrouping("boltWithStreams", "stream1");
builder.setBolt("myBolt2", new MyBolt2()).shuffleGrouping("boltWithStreams", "stream2");
Run Code Online (Sandbox Code Playgroud)