1、Stream Grouping概述
随机分组:元组以一定方式随机分布在螺栓任务上,从而确保每个螺栓都具有相等数量的元组。
字段分组:流按分组中指定的字段进行分区。例如,如果流按“ user-id”字段分组,则具有相同“ user-id”的元组将始终执行相同的任务,但是具有不同“ user-id”的元组可能会执行不同的任务。
部分密钥分组:流按分组中指定的字段进行分区(如“字段”分组),但在两个下游螺栓之间进行负载平衡,当输入数据倾斜时,可以更好地利用资源。本文对它的工作原理和优点提供了很好的解释。
全部分组:流在螺栓的所有任务之间复制。请谨慎使用此分组。
全局分组:整个流进入螺栓任务中的单个任务。具体来说,它将转到ID最低的任务。
无分组:此分组指定您不关心流的分组方式。当前,没有分组等效于随机分组。不过,最终,Storm会向下推没有分组的螺栓,以与其订阅的螺栓或喷嘴在同一线程中执行(如果可能)。
直接分组:这是一种特殊的分组。以这种方式分组的流意味着元组的生产者决定消费者的哪个任务将接收此元组。直接分组只能在已经声明为直接流的流上声明。发出到直接流的元组必须使用emitDirect方法之一发出。螺栓可以使用提供的TopologyContext或通过emit在OutputCollector中跟踪方法的输出(返回元组发送到的任务ID)来获取其使用者的任务ID。
本地或随机分组:如果目标螺栓在同一工作进程中具有一个或多个任务,则元组将被随机转换为那些正在进行的任务。否则,这就像常规的随机分组。
2、Shuffle Grouping开发详解
我们可以看到差不多每个线程分配到的任务基本都是差不多的
3、FieldGrouping开发详解
4、AllGrouping开发详解
5、Stream Grouping其他
http://storm.apache.org/releases/2.2.0/javadocs/org/apache/storm/grouping/CustomStreamGrouping.html