storm分组策略介绍

一、storm数据来源
Spout的数据源:

MQ:直接流数据源

Db:只能读配置文件

文件:只能学习用,其他无用。
问题:1、分布式应用无法读;2、spout开并发会重复读
Log文件增量数据:1、读出内容写入MQ,2、Storm处理

二、分组策略

stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个
Executors(多线程,并发度)
注:不是一个spout或bolt emit到多个bolt(广播方式)。

storm里面有6种类型的stream grouping。
单线程下均等同于All Grouping

1.Shuffle Grouping:轮询,每个线程平均分配。随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同。

2. Non Grouping:无分组, 这种分组和Shuffle grouping是一样的效果,多线程下不平均分配。

3. Fields Grouping:按Field分组,比如按word来分组, 具有同样word的tuple会被分到相同的Bolts, 而不同的word则会被分配到不同的Bolts。
作用:1、过滤,从源端(Spout或上一级Bolt)多输出Fields中选择某些Field
           2、相同的tuple会分发给同一个线程(Executer或task)处理
典型场景: 去重操作、Join

4. All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。每个线程获得的数据一致。

5. Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。适合场景:想象不到。

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

猜你喜欢

转载自javafu.iteye.com/blog/2369468