Topology创建过程
Topology是storm的一个完整工作流,由spout、bolt等组件构成。下面我们来看一下Topology是如何被创建的。
入口函数
我们一般会在storm的入口函数调用TopologyBuilder进行Topology的创建,如下所示
1 | TopologyBuilder builder = new TopologyBuilder(); |
TopolgyBuilder
比较重要的实例变量
1 | //所有提交的bolt放入_bolts中 |
setSpout
1 | public SpoutDeclarer setSpout(String id, IRichSpout spout, Number parallelism_hint) throws IllegalArgumentException { |
initCommon
1 |
|
setBolt
与setSpout类似
1 |
|
setSpout和setBolt区别
看上去二者完成的事情基本类似,但是返回值有区别
SpoutGetter的源码
1 |
|
而BoltGetter源码
1 |
|
可以发现BoltGetter还实现了不同的分组方式,如
1 |
|
分组的本质是在_common中通过对应的boltId找到对应的ComponentCommon对象,对inputs属性进行设置。
createTopology()
TopologyBuilder中还有一个比较重要的方法–createTopology(),其主要完成最后的封装工作。
1 |
|
最终我们设置的bolt和spout都被封装到了StormTopology中。
总结
总的来讲TopologyBuilder就是根据分组方式把spout和bolt节点连接起来形成一个拓扑结构。