1、Storm流计算从入门到精通 技术篇,讲师:Cloudy(北风网版权所有),7、实例讲解Grouping策略及并发度,读文件案例的问题思考,Spout数据源:Message queue MQ、Db、文件直接流数据源:MQ 从db只能读配置文件Log文件增量数据:1、读出内容写入MQ,2、Storm处理Spout读文件:学习用,其他无用读文件:1、分布式应用无法读;2、spout开并发会重复读,stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个 Executors(多线程,并发度) 注:不是一个spout或bolt emit到多个bolt(广播方式)。
2、storm里面有6种类型的stream grouping。 单线程下均等同于All Grouping Shuffle Grouping 轮询,平均分配。随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同。 2. Non Grouping: 无分组, 这种分组和Shuffle grouping是一样的效果,多线程下不平均分配。 3. Fields Grouping:按Field分组,比如按word来分组, 具有同样word的tuple会被分到相同的Bolts, 而不同的word则会被分配到不同的Bolts。 作用:1、过滤,从源端(Spout或上一级Bolt)多输出
3、Fields中选择某些Field2、相同的tuple会分发给同一个Executer或task处理 典型场景: 去重操作、Join,Stream grouping 策略,4. All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到。5. Global Grouping: 全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。适合场景:想象不到。6. Direct Grouping: 直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者决定由消息接收者的哪个task处理这个消息
4、。 只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来或者处理它的消息的taskid (OutputCollector.emit方法也会返回taskid),Stream grouping 策略,并发度,场景分析: 单线程下:加减乘除,和任何处理类Operate,汇总 多线程下: 1、局部加减乘除 2、做处理类Operate,如split 3、持久化,如入DB以WordCountTopology.java 为例讲解思考题:如何计算:word总数和word个数 ?并且在高并发下完成 前者是总行数,后者是去重word个数类似企业场景:计算网站PV和UVStorm流计算从入门到精通 课程链接: http:/ ,