1)如果Nimbus失败会怎么样?我们可以将其他节点转换为Nimbus吗?
2)拓扑输出存储在哪里?当一个螺栓发出一个元组时,它存储在哪里?
3)如果zookeeper失败会怎么样?
答案 0 :(得分:4)
Nimbus本身是一个容错的进程,这意味着它不会将其状态存储在内存中,而是存储在外部数据库(Zookeeper)中。因此,如果Nimbus崩溃(一种不太可能的情况),在下一次启动时它将恢复处理停止的位置。 Nimbus通常必须设置为由外部监控系统监控,例如Monit,它将定期检查Nimbus过程状态,并在出现任何问题时重新启动它。我建议您阅读Storm project's wiki以获取更多信息。
Nimbus是Storm群集的主节点,不可能有多个Nimbus节点。 (更新:Storm社区现在(截至2014年5月)通过让多个Nimbuses互相心跳来积极致力于使Nimbus守护程序以故障转移的方式容错)
元组被“存储”在元组树中,并随着拓扑执行的进行传递给拓扑执行链中的下一个螺栓。对于物理存储,元组可能存储在内存结构中,并根据需要进行分类以在集群的节点之间分配。完整的Storm集群的状态本身存储在Zookeeper中。 Storm并不关心拓扑结构或螺栓输出的持久存储 - 你的工作就是坚持处理结果。
与Nimbus相同,Zookeper在真实的生产Storm群集中必须配置可靠性,而Zookeeper则意味着在不同服务器上运行奇数个Zookeeper节点。您可以在Zookeper Administrator's Guide中找到有关配置Zookeeper生产群集的更多信息。如果Zookeeper失败(尽管在正确配置的Zookeeper集群中极不可能出现这种情况),Storm集群将无法继续处理,因为所有集群的状态都存储在Zookeeper中。
答案 1 :(得分:1)
关于问题1),来自Storm作者和维护者Nathan Marz的bug report以及随后的评论澄清了这个问题:
Storm不是为拓扑部分运行而设计的。当你击倒主人时,它无法重新分配失败的工人。我们正在研究Nimbus故障转移。 Nimbus对重启过程具有容错能力,这使得它对我们和大多数人的用例具有足够的容错能力。