apache-kafka - 如果 Zookeeper 节点关闭,Kafka 将不会启动
问题描述
我将 Kafka 和 Zookeeper 放在同一个服务器上,有多个节点。
在 Kafka 的 server.properties 中,我有这样一行
zookeeper.connect=server1:2181,server2:2181...
问题是,在所有Zookeeper 节点都可用之前,Kafka 不会启动。否则,即使其他 Zookeeper 节点已启动,我也会收到类似“Kafka 启动期间的致命错误”和“在状态下等待连接超时:CONNECTING”之类的错误。
这使得独立编写每个节点的启动脚本变得具有挑战性,因为一个节点上的启动脚本依赖于其他节点的状态。
首先:这是预期的行为还是我做错了什么?假设我在 Zookeeper 集群中有 3 个节点;所有 3 个节点都必须启动 Kafka 才能启动?这似乎违反直觉,因为更大的集群实际上会增加启动失败的机会,而不是提供更多的弹性。
第二:对此有什么好的解决方案?让每个节点上的 Kafka 等到 Zookeeper 在所有节点上完全启动的唯一方法是吗?
解决方案
据我所知,这是kafka正确启动的前提条件,我不觉得有太大的负担。如果 Zookeeper 集群本身在启动时已经出现问题,Kafka 本身可能会遇到问题,因此确保 Zookeeper 集群健康是一个很好的初始检查,恕我直言。
解决此限制的一种方法是配置一个单节点 Zookeeper 集群,并告诉 Kafka 使用该集群。事实上,您可以将 zookeeper 集群扩展到 3 个或更多节点,而 Kafka 已经启动并运行。更多细节可以在这里找到: 在 Kafka 集群中添加新的 ZooKeeper 节点?
作为记录,如果 Zookeeper 集群在启动并运行后出现故障,Kafka 本身就完全没问题。它只是无法接受新的生产者/消费者连接或创建主题,但在集群上处于活动状态的当前连接可以继续正常工作。
推荐阅读
- python - Python将二进制转换为int
- cypress - 当 url 是变量时,赛普拉斯访问命令会产生错误
- wordpress - WordPress中自定义帖子类型的单独循环?
- javascript - 如何从调用文件中捕获异常?
- python - 如何从python中的字符串值中提取特定内容
- r - R在数据框中查找小于另一个向量中的值的值
- java - Java ConcurrentHashMap 多头环境
- r - 如何根据 R 中其他列的值过滤一列中的值?
- php - php 5.6或8无法构建,7.3构建成功
- php - CodeIgniter3 - AWS S3 Bucket - PHP 警告来了,但文件上传成功