1

1) 如果 Nimbus 失败会怎样?我们可以将其他节点转换为 Nimbus 吗?

2)拓扑的输出存储在哪里?当一个螺栓发出一个元组时,它存储在哪里?

3) 如果 zookeeper 失败了怎么办?

4

2 回答 2

4
  1. Nimbus 本身是一个容错进程,这意味着它不会将其状态存储在内存中,而是存储在外部数据库(Zookeeper)中。因此,如果 Nimbus 崩溃(不太可能发生的情况),在下一次启动时,它将在停止的地方恢复处理。Nimbus 通常必须设置为由外部监控系统监控,例如 Monit,它会定期检查 Nimbus 进程状态并在出现任何问题时重新启动它。我建议您阅读Storm 项目的 wiki以获取更多信息。

    Nimbus 是 Storm 集群的主节点,不可能有多个 Nimbus 节点。(更新:Storm 社区现在(截至 5/2014 年)积极致力于通过让多个 Nimbus 彼此心跳来以故障转移方式使 Nimbus 守护进程容错)

  2. 元组“存储”在元组树中,随着拓扑执行的进行,它被传递到拓扑执行链中的下一个 Bolt。至于物理存储,元组可能存储在内存结构中,并根据需要进行序列化以分布在集群的节点之间。完整的 Storm 集群的状态本身存储在 Zookeeper 中。Storm 不关心拓扑或螺栓输出的持久存储——你的工作是持久化处理的结果。

  3. 与 Nimbus 相同,必须配置真实的生产 Storm 集群中的 Zookeper 以提高可靠性,而对于 Zookeeper,这意味着在不同的服务器上运行奇数个 Zookeeper 节点。您可以在Zookeper 管理员指南中找到有关配置 Zookeeper 生产集群的更多信息。如果 Zookeeper 失败(尽管在正确配置的 Zookeeper 集群中这种情况极不可能发生),Storm 集群将无法继续处理,因为所有集群的状态都存储在 Zookeeper 中。

于 2013-10-01T11:26:44.063 回答
1

关于问题 1),Storm 作者和维护者 Nathan Marz 的这个错误报告和随后的评论澄清了这个问题:

Storm 不是为让拓扑部分运行而设计的。当您关闭 master 时,它无法重新分配失败的工人。我们正在研究 Nimbus 故障转移。Nimbus 对进程重启具有容错性,这使得它对于我们和大多数人的用例具有足够的容错性。

于 2013-10-09T13:15:55.897 回答