TopologyBuilder会保存各个组件到相应的数据结构中,数据结构如下:
组件配置信息存放方法如下:
TopologyBuilder构造好Topology之后,通过Jstorm Client的StormSubmitter.submitTopology(streamName, conf,builder.createTopology())提交Topology到Jstorm集群,在StormSubmitter.submitTopology方法中,共分两步:1、上传jar文件 2、提交作业。首先会对配置项进行检查、然后将Topology自己的配置项和Jstorm的配置项组装成一个大的Map,之后上传用户在命令行提交的Jar包,然后通过NimbusClient 的submitTopologyWithOpts(String name, String uploadedJarLocation, String jsonConf, StormTopology topology, SubmitOptions options) 方法将Topology提交到Jstorm集群,其核心代码如下:
在submitTopology方法中,Jstorm要求每个topology名称必须唯一, 通过submitJar(conf)上传Jar包到ZK,再使用语句client.getClient().submitTopologyWithOpts(name, path, serConf, topology, opts)通过Thrift将topology提交到集群。
NimbusClient提交之后,NimbusSever通过com.alibaba.jstorm.daemon.nimbus.ServiceHandler.submitTopologyWithOpts(String topologyname, String uploadedJarLocation, String jsonConf, StormTopology topology, SubmitOptions options)处理接收到的topology,其具体逻辑如下:
运行一个topology,在zk上的目录如下: