共计 1253 个字符,预计需要花费 4 分钟才能阅读完成。
本文讲解了 Storm 故障容忍性 (Fault-Tolerance) 的设计细节:当 Worker、节点、Nimbus 或者 Supervisor 出现故障时是如何实现故障容忍性,以及 Nimbus 是否存在单点故障问题。
这篇博客的内容是关于 Storm 官网上的 Fault-Tolerance 文章的翻译。一直在关注 Storm 相关的技术,发现官网上这篇文章虽然字数很少,但却描述了 Storm 故障容忍性的主要设计细节(除了保证数据处理这一块,已经在 Guaranteeing message processing 文章中中详细讲解,所以文中只是给了一个 link)。
当一个 Worker 挂了会怎样?
当一个 Worker 挂了,Supervisor 会重启它。如果这个 Worker 连续在启动时失败,并且无法让 Nimbus 观察到它的心跳,Nimbus 将这个 Worker 重新分配到另一台机器上。
当一个节点挂了会怎样?
分配给这台机器的任务将会超时,并且 Nimbus 将这些任务重新分配给其它机器。
当 Nimbus 或者 Supervisor daemon 进程挂了会怎样?
Nimbus 和 Supervisor daemon 进程设计成快速失败 (无论何时当遇到任何异常情况,将会执行自毁) 和无状态(所有的状态都保存在 Zookeeper 或者磁盘上)。正如 Setting up a Storm cluster 中描述的,Nimbus 和 Supervior daemon 进程必须在监控下运行,如使用 daemontools 或者 monit 工具。所以如果 Nimbus 或者 Supervisor daemon 进程挂了,它可以像什么异常也没有发生似的重新启动。
非常重要的是,没有任何 Worker 进程会因 Nimbus 或者 Supervisor 的挂掉而受到影响。这个和 Hadoop 相反。在 Hadoop 中如果 JobTracker 挂了,所有运行的 Job 将会丢失。
Nimbus 是否有单点故障?
当你丢失了 Nimbus 节点,Worker 将依然可以继续工作。此外,Supervisor 将可以继续重启挂掉的 Worker。然而,没有了 Nimbus 节点,Worker 不能在需要的时候被重新分配到其它的机器。(例如你丢失了一台 Woker 机器)。
所以答案是 Nimbus 是会有单点故障的问题。在实践中,这个不是大问题。Nimbus deamon 进程挂掉不会引起任何灾难发生。在将来,计划将 Nimbus 设计成高可用。
Storm 如何保证数据处理?
Storm 提供了一些机制来保证即使在节点挂了或者消息被丢失的情况下也能正确的进行数据处理。可以参考 Guaranteeing message processing。
Storm 进程通信机制分析 http://www.linuxidc.com/Linux/2014-12/110158.htm
Apache Storm 的历史及经验教训 http://www.linuxidc.com/Linux/2014-10/108544.htm
Apache Storm 的详细介绍:请点这里
Apache Storm 的下载地址:请点这里