Apache Storm的主要亮点之一是它是一个容错,快速,没有“单点故障”(SPOF)的分布式应用程序。 我们可以根据需要在尽可能多的系统中安装Apache Storm,以提高应用程序的性能。
我们来看看Apache Storm Cluster的设计方式和内部架构。 下图描述了Cluster的设计
Apache Storm有两种类型的节点:Nimbus(主节点)和Supervisor(工作节点)。 Nimbus是Apache Storm的核心组件, Nimbus的主要工作是运行Storm Topology。 Nimbus分析Topology并收集要执行的任务, 然后,它会把任务分配给可用的Supervisor节点。
Supervisor有一个或多个工作进程,它把任务委派给工作进程。 工作进程将根据需要产生尽可能多的executor并运行任务。 Apache Storm使用内部分布式消息系统来实现Nimbus和Supervisor之间的通信。
组件 |
描述 |
Nimbus |
Nimbus是Storm Cluster的主节点, Cluster中的所有其他节点都称为工作节点(Worker node)。 主节点负责在所有工作节点之间分配数据,给工作节点分配任务并监控故障。 |
Supervisor |
遵循由Nimbus给出的指令的节点被称为Supervisor。 Supervisor拥有多个工作进程,并负责管理工作进程以完成Nimbus分配的任务。 |
Worker process |
工作进程执行与特定Topology相关的任务。 工作进程本身不会运行任务,而是创建executor来执行特定的任务。 一个工作进程将有多个executor。 |
Executor |
Executor只是工作进程产生的单个线程。 一个Executor只为特定的Spout或Bolt运行一个或多个任务。 |
Task |
任务执行实际的数据处理,所以,它要么是Spout,要么是Bolt。 |
Zookeeper framework |
Apache ZooKeeper是由Cluster(节点组)使用的服务,用于协调节点之间的关系,并使用强大的同步技术来维护共享数据。 Nimbus是无状态的,所以它依赖于ZooKeeper来监控工作节点的状态。
ZooKeeper帮助Supervisor与Nimbus交互,它负责维护Nimbus和Supervisor的状态。 |
Storm是无状态的,虽然无状态这个性质有一些缺点,但它实际上有助于Storm以最佳和最快的方式处理实时数据。
但是Storm并非完全无状态,它只是把其状态存储在Apache ZooKeeper中。 由于状态在Apache ZooKeeper中可用,因此可以重新启动失败的nimbus并使其从断点开始工作。通常,像monit这样的服务监控工具可以被用来监控Nimbus并在出现故障时重新启动这个Nimbus。
Apache Storm还有一个被称为Trident Topology的高级Topology,它具备状态维护功能,并且还提供了像Pig这样的更高层次的API。 我们将在接下来的章节中讨论这些功能。