版权声明:原创作品转载必须标明出处,谢谢配合! 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行为一致。
- 部分源码展示: