Storm 里面有 7 种类型的 stream grouping
1. Shuffle Grouping: 随机分组, 随机派发 stream 里面的 tuple, 保证每个 bolt 接收到的 tuple 数目大致相同
2. Fields Grouping: 按字段分组, 比如按 userid 来分组, 具有同样 userid 的 tuple 会被分到相同的 Bolts 里的一个 task, 而不同的 userid 则会被分配到不同的 bolts 里的 task
3. All Grouping: 广播发送, 对于每一个 tuple, 所有的 bolts 都会收到
4. Global Grouping: 全局分组, 这个 tuple 被分配到 storm 中的一个 bolt 的其中一个 task 再具体一点就是分配给 id 值最低的那个 task
5. Non Grouping: 不分组, 这 stream 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 行为一致
来源: http://www.bubuko.com/infodetail-2521476.html