JStrom中,一个计算任务通过多台机器使得计算分解为多个独立并行运行在集群内执行的任务(tasks),从而得到水平扩展。JStorm中,一个任务(task)就是一个可以运行在集群内任何节点的一个spout或一个bolt实例。
要了解这个并行如何工作的,我们首先要了解在JSorm集群内执行一个拓扑所涉及到的4个重要概念:
- 节点(Nodes)/机器(machines):一个JStorm集群包含一到多个节点,这个节点运行一个work。
- Workers(JVMs):这些是运行在一个节点的独立的JVM进程。每个节点可以配置运行一个到多个workers,即多少个JVM进程。
- Executors(threads):这是运行在一个worker JVM进程的java线程。Strom中,多个tasks可以运行在一个线程中。如果没有覆盖相关配置,Strom会一个task一个线程。JStrom中,一个task一个线程,和Storm不一样了。
- Tasks(bolt/spout实例):Tasks是spouts和bolts的实例,实例方法中的
nextTuple()和execute()方法会被线程调用。
----------
----------
=======
一个拓扑(topology)可以配置多个workers(jvm进程),配置方式:
> Config config = new Config();
config.setNumWorkers(2);
上面的配置,我们设置了2个workers,默认配置是1,所以我们一般会配置这个参数,以合理利用集群资源。
=======
在Jstorm集群中,集群节点分为两类:主控节点(master node ) 和工作节点(worker nodes)。
主控节点运行者一个守护进程(daemon)称之为Nimbus,它主要负责向集群其它工作节点(worker nodes)分发提交来的代码及分配任务(tasks),并且监视者每个任务的成功与失败。
工作节点(worker nodes)也运行者一个守护进程(daemon)称之为Supervisor,它执行一个拓扑(topology)的一部分。在Jstorm中,一个拓扑(topology)运行在很多机器上的许多工作节点(worker nodes)上。
Jstorm中各节点被设计成无状态的,而它们组成的集群状态被保存在Zookeeper集群上,所以这些节点可以失败或重启而不影响整个系统的健康运行。
Nimbus ---> Zookeeper ---> Supervisor
相关 博文:JStorm中消息确保处理机制 http://blog.csdn.net/doctor_who2004/article/details/47710331
JStorm/Strom配置executors和tasks(线程和实例) http://blog.csdn.net/doctor_who2004/article/details/47709945