storm提交topology任务大概分为5个角色,一是:client,二是nimbus,三是zookeeper,四是supervisor,五是worker
下面介绍每个角色在任务提交的时候所做的一些操作:
1.client:提交topology
2.nimbus:这个角色所做的操作相对较多,具体如下:
a.会把提交的jar包放到nimbus所在服务器的nimbus/inbox目录下
b.submitTopology方法会负责topology的处理;包括检查集群是否有active节点、配置文件是否正确、是否有重复的topology名称、各个bolt/spout名是否使用相同的id等。
c.建立topology的本地目录,nimbus/stormdist/topology-uuid
该目录包括三个文件:
stormjar.jar --从nimbus/inbox目录拷贝
stormcode.ser --此topology对象的序列化
stormconf.ser --此topology的配置文件序列化
d.nimbus任务分配,根据topology中的定义,给spout/bolt设置task的数目,并分配对应的task-id,最后把分配好的信息写入到zookeeper的../task目录。
e.nimbus在zookeeper上创建taskbeats目录,要求每个task定时向nimbus汇报
f.将分配好的任务写入到zookeeper,此时任务提交完毕。zk上的目录为assignments/topology-uuid
g.将topology信息写入到zookeeper/storms目录
3.supervisor
a.定期扫描zookeeper上的storms目录,看看是否有新的任务,有就下载。
b.删除本地不需要的topology
c.根据nimbus指定的任务信息启动worker
4.worker
a.查看需要执行的任务,根据任务id分辨出spout/bolt任务
b.计算出所代表的spout/bolt会给哪些task发送信息
c.执行spout任务或者blot任务