01-Storm初探

来源:互联网 发布:nba球队季后赛数据 编辑:程序博客网 时间:2024/06/06 12:47

1、Storm是什么?
此处省略一万字~~

2、Storm架构图
这里写图片描述

nimbus:负责资源分配和任务调度supervisor:负责接受nnimbus分配的任务,启动和停止属于自己管理的worker进程worker:运行具体处理逐渐逻辑的进程task:worker进程中每一个spout/bolt的线程称为一个task,在storm 0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

3、Storm编程模型

这里写图片描述

3.1 基本介绍

Topology:Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。

Spout:在一个topology中产生源数据流的组件。通常情况下,spout会从外部数据源中读取数据,然后转换为topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,storm框架会不停地调用此函数,用户只要在其中生成源数据即可。

Bolt:在一个topology中接受数据然后执行处理的组件。Bolt可执行过滤、函数操作、合并、写数据库等操作。Bolt是一个被动的角色其接口中有一个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。

Tuple:一次消息传递的基本单元。本来应该是一个key-value的map,但是由于各个组件间传递的tuple的字段名称已经实现定义好,所以tuple中只要按序填入各个value就行了,所以就是一个value list.

Stream:源源不断传递的tuple就组成了stream.

3.2 Streaming grouping

Streaming grouping:即消息的paitition方法
Stream grouping 定义了一个流在Bolt任务间该被 如何切分。这里有Storm提供的6个Stream Grouping类型。

(1)随机分组(Shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量的tuple. (2)字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如:根据 user-id 字段,相同 user-id的元祖总是分发到同一个任务,不同user-id的元祖可能分发到不同的任务。 (3)全部分组(All grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。 (4)全局分组(global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。 (5)无分组(None grouping):你不需要关心流是如何分组。目前,无分组等效于随机分组。但最终,Storm将把无分组的Bolts放到Bolts或Spouts订阅他们的同一线程去执行(如果可能)。 (6)直接分组(Direct grouping):这是一个特别的分组类型。元祖生产者决定tuple由哪个元祖处理者任务接收。

4、流式计算整体结构

这里写图片描述

flume 用来获取数据。
Kafka 用来临时保存数据
Strom 用来计算数据
Redis是个内存数据库,用来保存数据

5、Strom在综合项目中
这里写图片描述

6、最大声再快速最清晰

(1)Strom 架构中的核心组件(2)Strom 编程模型是什么(3)为什么有StreamGrouping
0 0
原创粉丝点击