Stream Grouping详解

版权声明:原创作品转载必须标明出处,谢谢配合! https://blog.csdn.net/qq_38704184/article/details/85055134

Storm里面有7种类型的stream grouping

  • shuffle Grouping :随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。
  • Fields Grouping:按字段分组,比如按userID来分组,具有同样userID的tuple会被分到相同的bolts里的一个task,而不同的userID则会被分配到不同的bolts里面的task。
  • All Grouping :广播发送,对于每一个tuple,所有的bolts都会收到。
  • Global Grouping :全局分组,这个tuple被分配到storm中的一个bolt的其中一个task,再具体一点就是分配给id值最低的那个task。
  • Non Grouping :不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和shuffle grouping是一样的效果,有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
  • Direct Grouping :直接分组,这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定有消息接收者的哪个task处理这个消息,只有被声明为Direct Stream的消息流可以声明这种方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理他的消息的task的id(outputCollector.emit方法也会返回task的id)
  • local or shuffle grouping:如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会随机发生给这些tasks。否则,和普通的shuffle grouping行为一致。
  • 部分源码展示:

猜你喜欢

转载自blog.csdn.net/qq_38704184/article/details/85055134
今日推荐