Storm基础(四)--Storm数据流分组

本文介绍了Storm中的核心概念——消息流及其分组策略。消息流是无界的Tuple序列,通过分布式并行处理。Stream Grouping包括随机分组、字段分组、全复制分组、全局分组和不分组,每种策略都有特定的使用场景,如字段分组确保相同字段的Tuple发送至同一Bolt,全局分组则所有流都分配给一个Task。

Stream消息流

消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列,这些Tuple以分布式的方式并行地创建和处理。定义消息流主要是定义消息流中的Tuple。每个消息流在定义时都会分配一个ID,因为单向消息流很普遍,OutputFieldsDeclarer定义了一些方法可以定义一个流而不用指定其ID。在这种情况下,该流有一个默认的ID。 

Stream Grouping消息流组

定义Topology的其中一步是定义每个Bolt接受何种流作为输入。Stream Grouping(消息流组)就是用来定义一个流如何分配Tuple到Bolt。Storm包括6种流分组类型。

1)随机分组(Shuffle Grouping)随机分发元组到Bolt,并保证每个Bolt获得相等数量的元组。--达到负载均衡效果。

2)字段分组(Fields Grouping):根据指定字段分割数据流并分组。例如,根据“user-id”字段,具有该字段的Tuple被分到相同的Bolt,不同的“user-id”值则会被分配到不同的Bolt。

底层是通过指定字段的hash值对Bolt数量取余来实现的。

注:在我们的单词统计案例中,就用到了这种分组,从而能够确保相同单词被发往同一个Bolt去处理

3)全复制分组(All Grouping)很少使用:对于每一个Tuple来说,所有的Bolt都会收到,所有的Tuple被复制到Bolt的所有任务上,需小心使用该分组。

4)全局分组(Global Grouping)全部的流都分配到唯一的一个Bolt上,就是分配给ID最小的Task。

注:这种模型是,对应的Bolt所设定的并发度没有意义,因为最后只有一个Bolt在进行处理。

5)不分组(None Grouping)很少使用:不分组的含义是,流不关心到底谁会收到它的Tuple。目前无分组等效于随机分组。一般不用这种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值