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

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。目前无分组等效于随机分组。一般不用这种方式。

猜你喜欢

转载自blog.csdn.net/weixin_44481878/article/details/88871979