我有两个鲸鱼喷水,两者都在散发一些数据
Spout A tuple-> pid, data1, data2, data3
Spout B tuple -> pid, m1, m2
我希望通过“pid”
加入上面两个spout的数据Spout A
|------------------> joinBolt ----> pid, data1, data2, data3, m1, m2
Spout B
JoinBolt将数据组合在“pid”上并将发出元组(pid,data1,data2,data3,m1,m2)
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"));
如果我在JoinBolt中有5的并行度,我可以确定来自两个具有相同pid的spout的数据将会出现在joinBolt的同一个实例上。
在这种情况下,由于我有5的并行性,我将有5个joinBolt实例(比如b1,b2,b3,b4,b5)。现在,spout1的pid1和spout2的pid1可能会转到joinBolt的不同实例,即使我在pid上设置了fieldsGrouping吗?
答案 0 :(得分:1)
如果您在pid上使用fieldsGrouping,对于相同的值pid,它将转到JoinBolt的同一个实例。 仅供参考,Storm基于窗口添加了JoinBolt功能https://github.com/apache/storm/blob/master/storm-core/src/jvm/org/apache/storm/bolt/JoinBolt.java。