STORM是一個消息處理引擎,可以處理源源不斷的進來的消息,這些消息的處理是可以按步驟的。
處理的方式有各種自定義:
- 可自定義消息處理的步驟
- 可自定義每種類型的消息需要多少個進程來處理
- 每個步驟里的消息是在某個進程里的線程來做處理的
- 可自定義每個步驟里的消息的線程數
- 可以增加和刪除要處理的消息類型
如果要處理某種消息了,要怎么辦呢?
- 定義數據來源組件(SPOUT)
- 定義處理步驟(BOLT)
- 組合成一個消息處理流程框架TOPOLOGY
- 定義處理消息的進程的數量、定義每個步驟并發時可用的線程數
- 部署TOPOLOGY
當一個TOPOLOGY被部署到STORM時,STORM會查找配置對象的WORKER數量,根據這個數量相應的啟動N個JVM,然后根據每個步驟配置的NUMTASKS生成相應個數的線程,然后每個步驟中配置的數量實例化相應個數的對象,然后就啟動一個線程不斷的執行SPOUT中的nextTuple()方法,如果這個方法中有輸出結果,就啟動另一線程,并在此線程中將這個結果作為參數傳到下一個對象的excue方法中。
如果此時又有一個步驟BOLT需要執行的話,也是新取一個線程去執行BOLT中的方法啟動的線程不會越過NUMTASKS的數量。