Storm stream分组:
1.Shuffle Grouping:
随机分组, 随机派发stream 里面的 tuple,保证每个 bolt 接收到的 tuple 数目大致相同。
轮询方式,平均分配tuple到下一级component上。
2.Fields Grouping:
按字段分组,比如按 userid 来分组, 具有同样 userid 的 tuple 会被分到相同的 Bolts 里的一个 task,
而不同的userid 则会被分配到不同的 bolts 里的 task。
类似SQL中的group by, 保证相同的Key的数据会发送到相同的task, 原理是对某个或几个字段做hash,
然后用hash结果求模得出目标taskId
3. All Grouping:
广播发送,对于每一个 tuple,所有的bolts 都会收到。
发送给target component所有task
4.Global Grouping:
全局分组, 这个 tuple 被分配 到 storm 中的一个 bolt的其中一个 task。
再具体一点就是分配给 id 值最低的 那个 task。
5. Non Grouping:
随机发送tuple到目标component上,但无法保证平均。 目前这种分组和 Shuffle grouping
是一样 的效果, 有一点不同的是 storm 会把这个 bolt 放到这个 bolt 的订阅者同一个 线程里面去执行。
6.Direct Grouping:
直接分组, 用这种分组意味着消息的发送者指定由消息接收者的哪个 task 处理
这个消息。 只有被声明为 Direct Stream 的消息流可以 声明这种分组方法。而且这种消息 tuple 必须使用
emitDirect 方法来发射。 消息处理者可以通过 TopologyContext 来 获取处理它的消息的 task 的 id
(OutputCollector.emit 方法也会返回 task 的 id)。
发送指定目标task
7.Local or shuffle grouping:
如果目标 bolt 有 一个或者多个 task 在同一个工作进程中,tuple 将会被随机发生给这些 tasks。
否则,和普通的 Shuffle Grouping 行为一 致。
8.customGrouping: 使用用户接口CustomStreamGrouping选择出目标task