storm平台之几个重要概念

storm平台几个重要概念概述如下:

1 Topologies

拓扑,计算单元,类似hadoop中的job,整个执行环形单位,从Spouts中获取数据,然后依次在Bolts中执行,不会终止,会一直执行直到显示结束。

 

2 Spouts

数据源泉,获取数据,是整个拓扑数据的生产者。

主要涉及的方法如下:

1.nextTuple:发射新tuple到topology/无tuple时返回;

2.ack:storm检测到一个tuple被整个topology处理成功时调用;

3.fail:storm检测到一个tuple被整个topology处理失败时调用;

 

3 Bolts

具体任务的执行者,具体消息处理逻辑实现,处理过程概述如下:

1.Bolts处理一个输入的tuple;

2.发射0/多个tuple;

3.调用ack通知storm:已经处理过本tuple;

 

4 Streams消息流

具体的数据流以tuple来体现他的存在,可以指定一个唯一的id。

 

5消息分发策略

Stream groupings,为定义一个流的分发策略,也就是说Spouts产生的数据怎么向Bolts流,目前支持六种分发策略:

1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证每个bolt接收到的tuple数目相同.

2. Fields Grouping:按字段分组, 比如按userid来分组, 具有同样userid的tuple会被分到相同的Bolts, 而不同的userid则会被分配到不同的Bolts.

3. All Grouping: 广播发送, 对于每一个tuple, 所有的Bolts都会收到.

4. Global Grouping: 全局分组,这个tuple被分配到storm中的一个bolt的其中一个task.再具体一点就是分配给id值最低的那个task.

5. Non Grouping: 不分组,意思是说stream不关心到底谁会收到它的tuple.目前他和Shuffle grouping是一样的效果,有点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程去执行.

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

 

你可能感兴趣的:(storm)