Storm中设计的术语包括 Stream、Spout、Bolt、Worker、Executor、Task、Stream Grouping 、Topology,基本概念如下:
- Stream是被处理的数据
- Spout是数据源
- Bolt封装了数据处理逻辑
- Worker是工作进程。一个工作进程包含一个或多个Executor线程
- Executor是运行Spout或Bolt处理逻辑的线程
- Task是Storm中的最小处理单元。一个Executor中包含一个多个Task,消息的分发都是从一个Task到另一个Task进行的
- Stream Grouping 定义了消息分发策略,定义了Bolt节点以何种方式接收数据。消息可以随机分配(Shuffle Grouping,随机分组),或者根据字段值分组(Fields Grouping,字段分组),或者广播(All Grouping,全局分组),也可以不关心数据是如何分组的(None Grouping,无分组),或者由自定义逻辑来决定,即有消息发送者决定应该有消息接收者组件的那个Task来处理消息(Direct Grouping,直接分组)
- Topology是由消息分组方式连接起来的Spout和Bolt的节点网络,它定义了运算逻辑的拓扑结构,处理的是不断流动的消息。除非杀掉Topology,否则它将永远运行下去。
1.1 Spout与Bolt关系
2.Storm中的节点
2.1
Storm集群中存在两种类型的节点。
运行Nimbus服务的主节点和运行Supervisor服务的工作节点。
Storm集群由一个主节点和多个工作节点组成。
主节点上运行一个名称“Nimbus”的守护进程,用于分配代码、布置任务及检测故障。
每个工作节点则运行一个名称“Supervisor”的守护进程,用于监听工作、开始并终止工作进程。
Nimbus和Supervisor都能快速失败并恢复,而且他们是无状态的,其元数据存储在Zookeeper中,这使得系统具有很高的容错性。Nimbus与Supervisor之间的协调工作是通过Zookeeper来完成的。
Worder由Supervisor来启动,一个Worker中可以有多个Executor线程,每个Executor中又可以包含一个或多个Task。Task为Storm中最小处理单元。它是Topology组件诸多并行度中的一个。每个Executor都会启动一个消息循环线程,用于接受、处理和发送消息。当Executor接收到属于其下某一个Task的消息后,就会调用该Task对应的处理逻辑对消息进行处理。
在逻辑上,Storm中消息的来源节点被称为Spout,消息的处理节点被称为GBolt.在系统中,可以存在多个Spout和Bolt,且每个Spout和Bolt都可以设置不同的并行度。
2.1 关系
3.开发过程中常用的类
- BaseRichSpout (消息生产者)
- BaseBasicBolt (消息处理者)
- TopologyBuilder (拓扑的构建器)
- Values (将数据存放到values ,发送到下个组件)
- Tuple(发送的数据被封装到Tuple,可以通tuple接收上个组件发送的消息)
- Config (配置)
- StormSubmitter / LocalCluster (拓扑提交器)
参考书籍:
1.《Storm源码分析》李明、王晓鹏编著,人民邮电出版社
2.其他网络资源