首页 > 解决方案 > 如果 Zookeeper 节点关闭,Kafka 将不会启动

问题描述

我将 Kafka 和 Zookeeper 放在同一个服务器上,有多个节点。

在 Kafka 的 server.properties 中,我有这样一行

zookeeper.connect=server1:2181,server2:2181...

问题是,在所有Zookeeper 节点都可用之前,Kafka 不会启动。否则,即使其他 Zookeeper 节点已启动,我也会收到类似“Kafka 启动期间的致命错误”和“在状态下等待连接超时:CONNECTING”之类的错误。

这使得独立编写每个节点的启动脚本变得具有挑战性,因为一个节点上的启动脚本依赖于其他节点的状态。

首先:这是预期的行为还是我做错了什么?假设我在 Zookeeper 集群中有 3 个节点;所有 3 个节点都必须启动 Kafka 才能启动?这似乎违反直觉,因为更大的集群实际上会增加启动失败的机会,而不是提供更多的弹性。

第二:对此有什么好的解决方案?让每个节点上的 Kafka 等到 Zookeeper 在所有节点上完全启动的唯一方法是吗?

标签: apache-kafkaapache-zookeeper

解决方案


据我所知,这是kafka正确启动的前提条件,我不觉得有太大的负担。如果 Zookeeper 集群本身在启动时已经出现问题,Kafka 本身可能会遇到问题,因此确保 Zookeeper 集群健康是一个很好的初始检查,恕我直言。

解决此限制的一种方法是配置一个单节点 Zookeeper 集群,并告诉 Kafka 使用该集群。事实上,您可以将 zookeeper 集群扩展到 3 个或更多节点,而 Kafka 已经启动并运行。更多细节可以在这里找到: 在 Kafka 集群中添加新的 ZooKeeper 节点?

作为记录,如果 Zookeeper 集群在启动并运行后出现故障,Kafka 本身就完全没问题。它只是无法接受新的生产者/消费者连接或创建主题,但在集群上处于活动状态的当前连接可以继续正常工作。


推荐阅读