java - 将不同的元组从 1 个喷口发送到 Apache Storm 中的不同 bolt

标签 java apache-storm

是否可以将不同的元组从 1 个 spout 发送到 Apache Storm 中的不同 bolt? 例如,我有 Spout A,它需要将元组 B 发送到 bolt C,将元组 D 发送到 bolt E。 我应该如何在 Java 中使用 spout 来实现它?我的意思是如何编写代码。

OutputCollector.emit(new Values(B, C))?

最佳答案

要从一个 Spout 向不同的 bolt 发送元组,您可以使用命名流,如下所示:

喷口

@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declareStream("streamA", new Fields("A"));
    outputFieldsDeclarer.declareStream("streamB", new Fields("B"));
}


@Override
public void nextTuple() {
    outputCollector.emit("streamA", new Values("A"));
    outputCollector.emit("streamB", new Values("B"));
}

然后,每个 bolt 订阅一个特定的流:

builder.setBolt("MyBoltA", new BoltA()).shuffleGrouping("MySpout", "streamA"); 
builder.setBolt("MyBoltB", new BoltB()).shuffleGrouping("MySpout", "streamB");

最后,如果一个 bolt 订阅了多个流,你可以使用下面的方法来知道元组是从哪个流发出的:

tuple.getSourceStreamId()

关于java - 将不同的元组从 1 个喷口发送到 Apache Storm 中的不同 bolt ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30386338/

相关文章:

java - 调整组件逻辑大小

java - 如何在 mongodb 和 Java 中 $and 两个文档?

apache-kafka - Storm : KafkaSpout - where is my consumer group?

cassandra - Storm Bolt 数据库连接

java - Kafka和Storm如何实现 Multi-Tenancy ?

java - 小程序无法连接到mysql服务器

java - TCPTransportConnection 内存泄漏

java - 将数据从 MySQL 加载到 JComboBox

apache-storm - Flink 和 Storm 之间的主要区别是什么?

apache-storm - Storm : Possible to set topology. message.timeout.secs 对于一个 bolt 要高得多