web-dev-qa-db-ja.com

Apache Stormでストリームを分割するにはどうすればよいですか?

ApacheStormでストリームを分割する方法がわかりません。たとえば、ボルトAがあります。ある計算の後で、somevalue1、somevalue2、somevalue3があります。それはsomevalue1をボルトBに、somevalue2をボルトCに、そしてsomevalue1、somevalue2をボルトDに送信したいと考えています。これをStormでどのように実行しますか?どのグループを使用し、トポロジはどのようになりますか?よろしくお願いします。

28
james

ケースで必要な場合は、さまざまなストリームを使用できます。実際には分割されていませんが、柔軟性が高くなります。たとえば、ボルトからのコンテンツベースのルーティングに使用できます。

ボルトでストリームを宣言します。

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

ここには2つのオプションがあります: Stream Groups および "Direct Grouping"。要件に応じて、そのうちの1つがサービスを提供します。

WordCountTopologyサンプルプロジェクトを見て、それがあなたが探しているものであるかどうかを確認してください。それ以外の場合は、 "直接グループ化"がより適切な代替手段になります。

ただし、グループ化戦略の選択は、要件によって異なります。

2
Chiron