关于Storm的高可用,有如下几个方面:html
(1)数据利用阶段能够经过ACK机制保证数据被处理;git
(2)在进程级别,worker失效,supervisor会自动重启worker线程;github
(3)在组件级别,supervisor节点失效,会在其余节点重启该supervisor任务;架构
可是一个很大的问题,nimbus节点失效怎么办?post
Supervisor进程和Nimbus进程,须要用Daemon程序如monit来启动,失效时自动从新启动。
由于它们在进程内都不保存状态,状态都保存在本地文件和ZooKeeper,所以进程能够随便杀。url
若是Nimbus进程所在的机器都直接倒了,须要在其余机器上从新启动,Storm目前没有自建支持,须要本身写脚本实现。
即便Nimbus进程不在了,也只是不能部署新任务,有节点失效时不能从新分配而已,不影响已有的线程。
一样,若是Supervisor进程失效,不影响已存在的Worker进程。spa
Zookeeper自己已是按至少三台部署的HA架构了。线程
目前storm是不支持nimbus高可用的。关于nimbus的重要性,在拓扑任务开始阶段,负责将任务提交到集群,后期负责拓扑任务的管理,好比任务查看,终止等操做。在一般状况下,nimbus的任务压力并不会很大,在天然状况下不会出现宕机的状况,但在天然因素下nimbus宕机,这种状况下怎么保证高可用?设计
虽然nimbus重启,对任务并无影响。code
目前storm官方或许是出于nimbus宕机对集群影响不大的考虑,并无在这方面有所进展。
但仍是有人在这方面进行了尝试,能够参考一下这个GitHub项目。
推荐连接:
—— 本文讲解了Storm故障容忍性(Fault-Tolerance)的设计细节:当Worker、节点、Nimbus或者Supervisor出现故障时是如何实现故障容忍性,以及Nimbus是否存在单点故障问题。
本文导读:
1 storm nimbus 单节点问题概述 2 storm与解决nimbus单点相关的概念 3 nimbus目前没法作到多节点的缘由 4 解决nimbus单点问题的关键 5 业界对nimbus单点问题的努力 6 nimbus单点问题的解决思路 7 NimbusCloudStorage的实现 8 总结: