风暴流与并行性相结合

时间:2017-03-30 13:06:27

标签: apache-storm

我有两个鲸鱼喷水,两者都在散发一些数据

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吗?

1 个答案:

答案 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