Apache kafka 卡夫卡赢得';如果Zookeeper节点关闭,则无法启动

Apache kafka 卡夫卡赢得';如果Zookeeper节点关闭,则无法启动,apache-kafka,apache-zookeeper,Apache Kafka,Apache Zookeeper,我让Kafka和Zookeeper位于同一台服务器上,有多个节点 在Kafka的server.properties中,我有一行 zookeeper.connect=server1:2181,server2:2181… 问题是,在所有Zookeeper节点可用之前,Kafka不会启动。否则,即使其他Zookeeper节点已启动,我也会收到一个错误,如“Kafka启动期间发生致命错误”和“处于状态时等待连接超时:正在连接” 这使得独立编写每个节点的启动脚本非常困难,因为一个节点上的启动脚本依赖于其他

我让Kafka和Zookeeper位于同一台服务器上,有多个节点

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

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

问题是,在所有Zookeeper节点可用之前,Kafka不会启动。否则,即使其他Zookeeper节点已启动,我也会收到一个错误,如“Kafka启动期间发生致命错误”和“处于状态时等待连接超时:正在连接”

这使得独立编写每个节点的启动脚本非常困难,因为一个节点上的启动脚本依赖于其他节点的状态

第一:这是预期的行为还是我做错了什么?假设Zookeeper集群中有3个节点;所有3个节点都必须启动才能启动卡夫卡?这似乎有悖常理,因为更大的集群实际上会增加启动失败的机会,而不是提供更多的恢复能力


第二:什么是好的解决方案?是让每个节点上的卡夫卡等待所有节点上的Zookeeper完全启动的唯一方法吗?

据我所知,这是卡夫卡正确启动的先决条件,我不认为有太多负担。如果zookeeper群集本身在启动时已经出现问题,Kafka本身可能会遇到问题,因此确保zookeeper群集正常运行是一个很好的初始检查,IMHO

绕过此限制的一种方法是配置单节点Zookeeper集群,并告诉Kafka使用该集群。之后,您可以将zookeeper集群扩展到3个或更多节点,而Kafka已经启动并运行。更多详细信息可在此处找到:


为了记录在案,如果Zookeeper集群一旦启动并运行,卡夫卡本身就完全可以了。它无法接受新的生产者/消费者连接或创建主题,但集群上当前活动的主题仍然可以正常工作。

我们在生产环境中遇到了同样的问题。 它原来是一个来自zookeeper库的bug(),卡夫卡使用它与zookeeper对话

我们的卡夫卡版本是1.1.1,它使用zookeeper-3.4.10.jar


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

有多少zookeeper服务器?它们是如何配置的?一个建议是不要让colocateI在5个ZK节点上出现类似的问题,如果kakfa实例连接到其中一个ZK节点,Kafka节点将不会选择其他4个ZK节点中的一个来连接并继续操作。Kafka将继续尝试重新连接到一个关闭的节点(尽管它知道其配置中的所有5个节点)。卡夫卡是否需要五个节点中的一个节点才能启动?可能是复制问题,它需要的znode在其他地方不存在?