【问题标题】:Kafka cluster zookeeper failure handlingKafka集群zookeeper故障处理
【发布时间】:2016-01-25 14:56:32
【问题描述】:

我将实现一个由 3 台机器组成的 kafka 集群,一台用于 zookeeper,另外 2 台作为代理。我有大约 6 台消费者机器和大约一百台生产者。

现在,如果其中一个代理失败,由于复制功能,可以避免数据丢失。但是如果zo​​okeeper失败,同一台机器无法启动怎么办?我有几个问题:

  1. 我注意到,即使在 zookeeper 失败后,生产者仍继续在指定的代理中推送消息。但消费者再也无法取回它们。因为消费者没有注册。那么在这种情况下,数据是否会永久丢失?
  2. 如何在运行时更改代理配置中的 zookeeper ip?是否必须关闭它们才能更改 zookeeper ip?
  3. 即使以某种方式将新的 zookeeper 机器带入集群,之前的数据也会丢失吗?

【问题讨论】:

    标签: java message-queue apache-kafka producer-consumer kafka-producer-api


    【解决方案1】:

    只运行一个 Zookeeper 实例是不能容错的,行为无法预测。根据HBase reference,您应该设置一个至少有 3 台服务器的 ensemble。

    查看官方文档页面:Zookeeper clustered setup

    【讨论】:

    • 所以假设在上面提到的设置中我还添加了 2 台 Zookeeper 机器,如果其中一台出现故障,那么剩下的两台中的任何一台都可以连接?他们会拥有所有最新数据吗?
    • 如果再添加两台机器,那么只有一台会失败。看看这个:stackoverflow.com/questions/4228227/what-does-2n-1-quorum-mean 是的,数据将同步,因为这些机器是复制的。
    • 在开发环境中我拿了两台机器,并在每台机器的zookeeper.config文件中添加了这个配置initLimit=5 syncLimit=2 server.1=x.x.x.x:2888:3888 server.2=localhost:2888:3888Server.2是我即将启动zookeeper的服务器。所以当我点击启动脚本时,我得到了无法连接带有 x.x.x.x:3888 的 server.1 的错误。
    • 嗯,你试过先调试吗?例如,telnet x.x.x.x 3888 ?
    • 太棒了!我很高兴它有帮助:)
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多