TopologyBuilder功能:
编织ISpout,IBolt
的拓扑图,并生成StormTopology实例,以便thrift使用.
用户编程的接口:IBolt,ISpout,IStateSpout
IRichBolt,IBasicBolt,IRichSpout,IRichStateSpout
IBasicBolt
没有继承IBolt
,在编织拓扑结构时,使用BasicBoltExecutor
包装成IRichBolt
public BoltDeclarer setBolt(String id, IBasicBolt bolt, Number parallelism_hint) { |
IRichStateSpout
暂时没有实现
public void setStateSpout(String id, IRichStateSpout stateSpout, Number parallelism_hint) { |
编织拓扑图BoltDeclarer,SpoutDeclarer
SpoutDeclarer
配置IRichSpout
BoltDeclarer
配置IRichBolt
并,通过grouping,配置ComponentCommon
的inputs
等。
TopologyBuilder
与IComponent
/** |
TopologyBuilder#initCommon,调用ComponentConfiguration到ComponentCommon的json_conf中
private void initCommon(String id, IComponent component, Number parallelism) { |
TopologyBuilder#getComponentCommon,调用getFieldsDeclaration到ComponentCommon的streams中
private ComponentCommon getComponentCommon(String id, IComponent component) { |
重点关注ComponentCommon
struct ComponentCommon { |
IComponent
是通过主动push的方式,这就涉及到问题push给谁?
从ComponentCommon
定义来看,它只声明了生成的stream的相关信息。
private TaskSendTargets makeSendTargets() { |
Common#outbound_components
从ComponentCommon
声明中的谁消费什么,转变为我push给谁。
public static Map<String, Map<String, MkGrouper>> outbound_components(TopologyContext topology_context, WorkerData workerData) { |
thrift
union JavaObjectArg { |