首页 > 代码库 > storm分组方式

storm分组方式

    Storm有 7 种类型的stream分组:

         1.Shuffle Grouping: 

                   随机分组, 随机派发stream 里面的 tuple,保证每个 bolt 接收到的 tuple 数目大致相同。<br>

         2.Fields Grouping:

                   按字段分组,比如按 userid 来分组, 具有同样 userid 的 tuple 会被分到相同的 Bolts 里的一个 task,
                   而不同的userid 则会被分配到不同的 bolts 里的 task。 

         3. All Grouping:

                   广播发送,对于每一个 tuple,所有的bolts 都会收到。<br>

         4.Global Grouping:

                   全局分组, 这个 tuple 被分配 到 storm 中的一个 bolt的其中一个 task。再具体一点就是分配给 id 值最低的 那个 task。<br>

         5. Non Grouping:

                    不分组,这个 分组的意思是说 stream 不关心到底谁会收到它的 tuple。 目前这种分组和 Shuffle grouping
                    是一样 的效果, 有一点不同的是 storm 会把这个 bolt 放到这个 bolt 的订阅者同一个 线程里面去执行。

         6.Direct Grouping: 

                    直接分组, 这是一种比较特别 的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个 task 处理
                    这个消息。 只有被声明为 Direct Stream 的消息流可以 声明这种分组方法。而且这种消息 tuple 必须使用
                    emitDirect 方法来发射。 消息处理者可以通过 TopologyContext 来 获取处理它的消息的 task 的 id
                   (OutputCollector.emit 方法也会返回 task 的 id)。 

         7.Local or shuffle grouping:

                    如果目标 bolt 有 一个或者多个 task 在同一个工作进程中,tuple 将会被随机发生给这些 tasks。否则,和普通的 Shuffle Grouping 行为一 致。

storm分组方式