如果Zookeeper节点关闭,则Kafka无法启动

时间:2019-12-21 19:33:42

标签: apache-kafka apache-zookeeper

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

在Kafka的server.properties中,我有一条类似

的行

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

问题是,直到所有个Zookeeper节点可用,Kafka才能启动。否则,即使其他Zookeeper节点处于启动状态,我也会收到类似“ Kafka启动过程中的致命错误”和“状态为CONNECTING时等待连接超时”的错误。

这给独立编写每个节点的启动脚本带来了挑战,因为一个节点上的启动脚本取决于其他节点的状态。

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

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

2 个答案:

答案 0 :(得分:0)

据我所知,这是Kafka正确启动的先决条件,我认为负担不太多。如果Zookeeper群集本身在启动时已经遇到问题,那么Kafka本身可能会遇到问题,因此确保Zookeeper群集运行状况良好是一项很好的初始检查,恕我直言。

解决此限制的一种方法是配置单节点Zookeeper群集,并告诉Kafka使用该群集。之后,您可以将Zookeeper集群增加到3个或更多节点,而Kafka已经启动并正在运行。更多详情可在这找到: Adding new ZooKeeper node in Kafka cluster?

记录下来,如果Zookeeper集群启动并运行后发生故障,那么Kafka本身就很好。只是无法接受新的生产者/消费者连接,但是群集中当前活动的当前连接仍然可以正常工作。

答案 1 :(得分:0)

我们在生产环境中遇到了同样的问题。 事实证明,这是Zookeeper库中的一个错误(ZOOKEEPER-2184),Kafka使用该错误与Zookeeper进行了对话。

我们的kafka版本是1.1.1,使用zookeeper-3.4.10.jar。

将其替换为zookeeper-3.4.13.jar后,kafka可以成功重启。