STORM是一个消息处理引擎,可以处理源源不断的进来的消息,这些消息的处理是可以按步骤的。
处理的方式有各种自定义:
- 可自定义消息处理的步骤
- 可自定义每种类型的消息需要多少个进程来处理
- 每个步骤里的消息是在某个进程里的线程来做处理的
- 可自定义每个步骤里的消息的线程数
- 可以增加和删除要处理的消息类型
如果要处理某种消息了,要怎么办呢?
- 定义数据来源组件(SPOUT)
- 定义处理步骤(BOLT)
- 组合成一个消息处理流程框架TOPOLOGY
- 定义处理消息的进程的数量、定义每个步骤并发时可用的线程数
- 部署TOPOLOGY
当一个TOPOLOGY被部署到STORM时,STORM会查找配置对象的WORKER数量,根据这个数量相应的启动N个JVM,然后根据每个步骤配置的NUMTASKS生成相应个数的线程,然后每个步骤中配置的数量实例化相应个数的对象,然后就启动一个线程不断的执行SPOUT中的nextTuple()方法,如果这个方法中有输出结果,就启动另一线程,并在此线程中将这个结果作为参数传到下一个对象的excue方法中。
如果此时又有一个步骤BOLT需要执行的话,也是新取一个线程去执行BOLT中的方法启动的线程不会越过NUMTASKS的数量。