Apache kafka 如果Zookeeper完全失败了怎么办?

Apache kafka 如果Zookeeper完全失败了怎么办?,apache-kafka,apache-zookeeper,failover,Apache Kafka,Apache Zookeeper,Failover,我们已经建立了一个由3个代理组成的Kafka/Zookeeper集群。我们有一个制作人,向一个特定的卡夫卡主题发送消息,还有一些消费者群体阅读该主题。这些消费者通过Zookeeper为自己进行领导人选举(独立于卡夫卡) 使用的版本有: 卡夫卡:0.9.0.1 动物园管理员:3.4.6(包含在卡夫卡套餐中) 所有流程均由主管管理。到目前为止,一切正常。我们现在尝试的(出于测试目的)是简单地关闭所有Zookeeper进程,看看会发生什么 正如我们所料,我们的消费者进程无法再连接到Zookeepe

我们已经建立了一个由3个代理组成的Kafka/Zookeeper集群。我们有一个制作人,向一个特定的卡夫卡主题发送消息,还有一些消费者群体阅读该主题。这些消费者通过Zookeeper为自己进行领导人选举(独立于卡夫卡)

使用的版本有:

  • 卡夫卡:0.9.0.1
  • 动物园管理员:3.4.6(包含在卡夫卡套餐中)
所有流程均由主管管理。到目前为止,一切正常。我们现在尝试的(出于测试目的)是简单地关闭所有Zookeeper进程,看看会发生什么

正如我们所料,我们的消费者进程无法再连接到Zookeeper。但出乎意料的是,卡夫卡的经纪人仍然有效。我们的制片人一点也没有抱怨,仍然能够写进这个话题。虽然我不能使用kafka/bin/kafka-topics.sh或类似的工具,因为它们都需要zookeeper参数,但我仍然可以看到主题日志的实际大小在增长。在重新启动zookeeper进程后,一切都像以前一样正常工作

我们现在不知道的是。。。那里到底发生了什么?
我们认为,卡夫卡需要一个有效的动物园管理员连接,我们在网上找不到这种行为的任何解释

当您拥有zookeeper的一个节点时,代理将无法联系zookeeper,代理发现zookeeper无法访问后,代理也将无法访问。因此,生产者和消费者。 如果是制作人,则开始删除(拒绝记录)。在消费者的情况下,未确认的读取记录可能会在代理启动并准备就绪时再次处理


在3node zk的情况下,一个节点故障是可以接受的,因为仍然满足仲裁要求。。。但无法承受将导致上述后果的2节点故障

卡夫卡完成的所有操作都不需要Zookeeper。例如,Kakfa消费者客户端将其偏移量提交给ZK。据我所知。如果代理未能为失败的代理托管的分区选择新的领导者,那么也可以使用ZK。然而,只要所有经纪人都在工作,写作就不成问题:请参阅和了解更多细节。>Kakfa消费者客户将他们的补偿提交给ZK。是吗?据我所知,“新消费者”不需要这样做,因为他们想将消费者与Zookeeper分离。这就是为什么使用bootstrap.servers属性而不是zookeeper.connect属性并使用Kafka端口。将旧使用者提交偏移量到ZK中。新使用者将其偏移量提交到Kafka主题中,并且独立于ZK。根据Wiki,Zookeeper用于:服务器故障检测、数据分区和同步数据复制。请参考?