一个正在运行的Storm Cluster应该有一个Nimbus和一个或多个Supervisor。 另一个重要的节点是Apache ZooKeeper,它将用于Nimbus和Supervisor之间的协调。
现在让我们仔细看看Apache Storm的工作流程:
-
最开始,Nimbus将等待“Strom Topology”提交给它。
-
一旦Topology被提交后,Nimbus就处理Topology并收集要执行的所有任务以及任务间的顺序关系。
-
然后,Nimbus将任务平均分配给所有可用的Supervisor。
-
每隔一定的时间间隔,所有的Supervisor都会将“心跳”(heartbeat)发送给Nimbus来表明他们还在运转。
-
当某一个Supervisor宕机并且不向Nimbus发送心跳时,Nimbus就把任务分配给另一个Supervisor。
-
当Nimbus本身down掉时,Supervisor会继续处理已经分配给它的任务并不会出现任何问题。
-
如果所有任务都完成了,Supervisor就会等待新的任务进入。
-
同时,down掉的Nimbus会被服务监控工具自动重启。
-
重新启动的Nimbus将从停止的地方继续工作。 同样,down掉的Supervisor也可以自动重新启动。 由于Nimbus和Supervisor都可以自动重启,并会像以前一样继续运行,所以Storm能保证对所有任务至少处理一次。
-
一旦处理完所有Topology,Nimbus就会等待新的Topology提交请求,同样,Supervisor也在等待新的任务。
默认情况下,Storm Cluster有两种模式:
-
本地模式 – 此模式用于开发,测试和调试,因为它是查看所有Topology组件一起工作的最简单方法。 在这种模式下,我们可以调整参数,使我们能够看到我们的Topology如何在不同的Storm配置环境中运行。 在本地模式下,Storm Topology在本地计算机上的单个JVM里运行。
-
生产模式 – 在这种模式下,我们将Topology提交给正在运行的Storm Cluster,该Cluster由多个进程组成,通常运行在不同的机器上。 正如Storm工作流程中所讨论的,一个正常运行的Cluster将无限期地运行,直到它被关闭。