Apache storm 风暴流以平行方式汇合

Apache storm 风暴流以平行方式汇合,apache-storm,Apache Storm,我有两个喷口,两个喷口都在释放一些数据 Spout A tuple-> pid, data1, data2, data3 Spout B tuple -> pid, m1, m2 我想把上面两个喷口的数据连接到“pid”上 JoinBolt将通过“pid”组合数据并发出元组(pid、data1、data2、data3、m1、m2) 若我在JoinBolt中的并行度为5,我可以确保来自具有相同pid的两个喷口的数据将落在JoinBolt的相同实例上 在本例中,由于并行度为5,所以将有

我有两个喷口,两个喷口都在释放一些数据

Spout A tuple-> pid, data1, data2, data3
Spout B tuple -> pid, m1, m2
我想把上面两个喷口的数据连接到“pid”上

JoinBolt将通过“pid”组合数据并发出元组(pid、data1、data2、data3、m1、m2)

若我在JoinBolt中的并行度为5,我可以确保来自具有相同pid的两个喷口的数据将落在JoinBolt的相同实例上


在本例中,由于并行度为5,所以将有5个joinBolt实例(比如b1、b2、b3、b4、b5)。现在,即使我已将fieldsGrouping设置为pid,来自spout1的pid1和来自spout2的pid1是否可能会转到joinBolt的不同实例?

如果您在pid上使用fieldsGrouping,对于相同的pid值,它将转到joinBolt的相同实例。 仅供参考,Storm基于窗口添加了JoinBolt功能

Spout A
   |------------------> joinBolt ----> pid, data1, data2, data3, m1, m2
Spout B
JoinBolt joinBolt = new JoinBolt()
BoltDeclarer bd = builder.setBolt("joinBoltId", joinBolt, 5); 
bd.fieldsGrouping("spout1Id" "stream1",  new Fields("pid"));
bd.fieldsGrouping("spout2Id", "stream2", new Fields("pid"));