1. 程式人生 > >Storm中Spout和Bolt的生命週期

Storm中Spout和Bolt的生命週期

1、在定義Topology例項過程中,定義好Spout例項和Bolt例項
2、在提交Topology例項給Nimbus的過程中,會呼叫TopologyBuilder例項的createTopology()方法,以獲取定義的Topology例項。在執行createTopology()方法的過程中,會去呼叫Spout和Bolt例項上的declareOutputFields()方法和getComponentConfiguration()方法,declareOutputFields()方法配置Spout和Bolt例項的輸出,getComponentConfiguration()方法輸出特定於Spout和Bolt例項的配置引數值對。Storm會將以上過程中得到的例項,輸出配置和配置引數值對等資料序列化,然後傳遞給Nimbus。

3、在Worker Node上執行的thread,從Nimbus上覆制序列化後得到的位元組碼檔案,從中反序列化得到Spout和Bolt例項,例項的輸出配置和例項的配置引數值對等資料,在thread中Spout和Bolt例項的declareOutputFields()和getComponentConfiguration()不會再執行。
4、在thread中,反序列化得到一個Bolt例項後,它會先執行Bolt例項的prepare()方法,在這個方法呼叫中,需要傳入一個OutputCollector例項,後面使用該OutputCollector例項輸出Tuple
5、接下來在該thread中按照配置數量建立task集合,然後在每個task中就會迴圈呼叫thread所持有Bolt例項的execute()方法

6、在關閉一個thread時,thread所持有的Bolt例項會呼叫cleanup()方法
不過如果是強制關閉,這個cleanup()方法有可能不會被呼叫到