如何在不同的机器上运行kafka

时间:2017-07-03 11:04:38

标签: apache-kafka logstash filebeat

过去10天我试图在不同的机器上设置Kafka:

  1. Server32
  2. Server56
  3. 以下是我到目前为止完成的任务列表

    • 配置Zookeeper并使用
    • 在两台服务器上启动
      

    server.1 = Server32_IP:2888:3888

         

    server.2 = Server56_IP:2888:3888

    • 我还更改了服务器和服务器1属性,如下所示
      

    broker.id = 0 port = 9092 log.dir = / tmp / kafka0-logs
      host.name = Server32
      zookeeper.connect = Server32_IP:9092,Server56_IP:9062

    &安培;服务器-1

      

    broker.id = 1 port = 9062 log.dir = / tmp / kafka1-logs
      host.name = Server56
      zookeeper.connect = Server32_IP:9092,Server56_IP:9062

    Server.property我在Server32中运行了 Server-1.property我在Server56中运行

      

    问题是:当我在两个服务器中启动生产者时,如果我尝试从任何一个消费,那么它正在工作但是   当我停止任何一台服务器时,另一台服务器无法发送详细信息

    请帮我解释一下这个过程

2 个答案:

答案 0 :(得分:0)

运行2名动物园管理员不具备容错能力。如果其中一个动物园管理员停止了,那么系统将无法运行。与Kafka代理不同,zookeeper需要法定数量(或大多数)配置的节点才能工作。这就是为什么zookeeper通常部署有奇数个实例(节点)的原因。由于2个节点中的1个不是多数节点,因此实际上并不比运行单个zookeeper更好。您需要至少3名动物园管理员才能容忍失败,因为3人中有2人占多数,因此系统会保持不变。

Kafka不同,因此您可以拥有任意数量的Kafka代理,如果它们配置正确并且您创建的主题复制因子为2或更高,那么如果您使用任何一个代理节点,Kafka群集可以继续即使它只是2中的一个。

答案 1 :(得分:0)

这里缺少很多信息,例如Kafka版本以及您是否使用新的消费者API或旧API。我假设您可能正在使用新版本的Kafka,如0.10.x以及新的客户端API。在新版本的客户端API中,日志数据存储在Kafka代理中,而不是旧版本中的Zookeeper。我认为您的问题是您创建的主题的复制因子为1,并且您关闭的Kafka代理服务器同时托管了唯一的副本,因此您将无法生成或使用消息。您可以通过运行以下命令来确认主题的运行状况:

kafka-topics.sh --zookeeper ZHOST:2181 --describe 

您可能希望将复制因子增加到2.这样您就可以通过一个代理失败来逃脱。理想情况下,您将拥有3个或更多复制因子为2或更高的Kafka Broker服务器(显然不超过群集中的代理数)。请参阅以下链接:

https://kafka.apache.org/documentation/#basic_ops_increase_replication_factor

  

对于复制因子为N的主题,我们将容忍最多N-1个服务器>失败而不会丢失任何提交给日志的记录。“