Storm中Spout和Bolt的生命週期

2021-07-11 05:04:16 字數 844 閱讀 2362

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()方法有可能不會被呼叫到

Storm的Spout和Bolt中的方法

一 spout中的方法 當乙個task 被初始化的時候會呼叫此 open 方法。一般都會在此方法中對傳送 tuple 的物件spoutoutputcollector 和配置物件 topologycontext 初始化。此方法用於宣告當前 spout 的tuple 傳送流。stream 流的定義是通過...

SparkStreaming和storm的區別

這是2種不同的架構。他們的區別是sparkstreaming的吞吐量非常高,秒級準實時處理,storm是容錯性非常高,毫秒級實時處理 解釋 sparkstreaming是一次處理某個間隔的資料,比如5秒內的資料,批量處理,所以吞吐量高。storm是來一條處理一條,所以速度快,不存在丟失資料 應用場景...

storm中fieldsGroup的機制

說實話storm功能非常強大,但是參考資料是在是太少了,有些只能自己摸索,專案中用到了fieldsgroup,所以就研究一下。fieldsgroup的機制是把declar中暴露定義的fields中的字段進行hash,然後分到不同的bolt中,開始理解有誤,所以一直跑不通。囧 直接上 在第乙個spou...