Подтвердить что ты не робот

Как бы я разделил поток в Apache Storm?

Я не понимаю, как бы я разделил поток в Apache Storm. Например, у меня есть болт А, который после некоторых вычислений имеет некоторое значение1, некоторое значение2 и некоторое значение3. Он хочет отправить somevalue1 на болт B, somevalue2 на болт C, а somevalue1, somevalue2 на болт D. Как я могу сделать это в Storm? Какую группу я бы использовал и как бы выглядела бы моя топология? Спасибо заранее за вашу помощь.

4b9b3361

Ответ 1

Вы можете использовать разные потоки, если ваш случай нуждается в этом, он не очень раскалывается, но у вас будет много гибкости, вы можете использовать его для маршрутизации на основе контента с помощью болта, например:

Вы объявляете поток в болте:

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

Ответ 2

У вас есть два варианта: Группы потоков и "Прямая группировка". В зависимости от ваших требований один из них будет вам служить.

Посмотрите пример образца WordCountTopology, чтобы узнать, что именно вы ищете. В противном случае "Direct Grouping" станет лучшей альтернативой.

Но опять же, выбор стратегии группировки зависит от ваших требований.