Storm核心组件运行机制

 

 



 
1. storm集群启动后,nimbus进程、supervisor进程,分别向zookeeper进行注册

  • nimbus做为服务方,往zookeeper对应目录写job配置信息文件
  • supervisor做为客户端,监控zookeeper对应的目录

2. 通过strom client客户端提交job到nimbus,其中包括:

  • 指定spout、bolt实现类,以及并行数量
  • 各个spout、bolt的依赖关系和分组关系
  • Storm配置信息、运行方式(如:服务器提交或本地提交)
  3. nimbus收到客户提交的Job请求信息后,按storm集群的配置信息,以及当前集群上空闲的worker信息,进行任务分配,将任务分配给supervisor,并将上述信息进行序列化,存储到zookeeper集群上,其中序列化的信息包括:
  • 由哪几台supervisor(机器),启动多少个worker,多少并行线程数
  • superviso和worker对应的ip地址和端口号
  • job程序

 

4. zookeeper监控到nimbus的写文件操作后,发送事件通知所有supervisor,对应的supervisor收到事件通知后,去zookeeper指定目录获取worker和job信息,并启动相应数量的worker和Exectuor(一般情况下,一个Executor对应一个Task任务,一个Task可以是一个spout对象实例或一个bolt对象实例)

 

 

5. Executor启动后,通过spout去读取数据源(数据源可能是:消息中间件、数据库、文件等数据)

 

 

6. 在上一步的基础上,spout读取外部数据源信息,通过调用nextTuple方法,进行任务处理,然后将处理结果发送给Topology程序,Topologyt程序由Storm框架将结果发往Storm的消息队列,然后Storm框架去消费队列中的一个消息,然后去调用下一个依赖的bolt,通过反序列化将Topology对象信息传bolt对象,然后去调用bolt的execute方法进行处理

 

 

7. Exeutor按照spout和bolt的依赖关系,持续处理数据,直接到整个Topology执行结束(在Storm中通过UI界面或Storm命令结束Topology)

 

 

 

猜你喜欢

转载自hpitcn.iteye.com/blog/2286511