Stream Grouping定义了一个流在Bolt任务间该如何被切分。 这里有storm提供的9个Stream Grouping类型
1、shuffleGrouping(随机分组)
随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple。
2、fieldsGrouping(字段分组)
根据指定字段分割数据流,并分组。例如,根据"user-id"字段,相同"user-id"的元组总是分发到同一个任务,不同“ user-id”的元组可能分发到不同的任务。
原理是 对某个或几个字段做hash,然后用hash结果求模得出目标taskId。
3、globalGrouping(全局分组)
全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
4、allGrouping(全部分组)
tuple被复制到bolt的所有任务。这种类型需要谨慎使用。
5、directGrouping(直接分组)
这是一个特别的分组类型。元组生产者决定tuple由哪个元组处理者(Blot)任务接收。
6、noneGrouping(无分组)
目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅它们的同一线程去执行(如果可能)。
7、localOrShuffleGrouping(本地或随机分组)
如果目标bolt有一个或多个任务在同一个的worker进程中,tuples会随机发送给这些任务。 否则,就和普通的随机分组一样。
8、PartialKeyGrouping(部分关键字分组) after v1.0.0
这种方式与字段分组很相似,根据定义的字段来对数据流进行分组,不同的是,这种方式会考虑下游 Bolt 数据处理的均衡性问题,在输入数据源关键字不平衡时会有更好的性能。
9、自定义分组
可以实现customGrouping接口来选择出目标task。