代码之家  ›  专栏  ›  技术社区  ›  pm1391

通过公共IP将Logstash连接到Azure中的Kafka

  •  1
  • pm1391  · 技术社区  · 7 年前

    我无法将Logstash连接到在Azure中运行的Kafka实例。我的卡夫卡主机有一个静态公共IP地址。如果我在同一个子网中插入一个日志存储机器并将两者连接起来,一切都会正常工作。但是,当我试图通过公共IP地址向kafka实例发送数据时,我收到了错误。例如,尝试将我的Logstash实例从主页连接到Azure云环境。

    以下是相关的配置文件和我尝试过的内容:

    日志存储输出:

      kafka {
        bootstrap_servers => "my public ip:9092"
        codec => json
        topic_id => "tagger"
      }
    

    在继续之前,netcat验证了我确实可以到达卡夫卡上的端口,其间没有防火墙阻止连接。

    这是我的卡夫卡 服务器属性 根据其他答案中的类似问题,使用我尝试过的设置归档。

    #--------------------------------------------------------#
    #Logstash says: Sending batch to Kafka failed. Will retry after a delay. {:batch_size=>1, :failures=>1, :sleep=>0.01}
    #advertised.listeners=PLAINTEXT://10.10.100.4:9092
    #listeners=PLAINTEXT://10.10.100.4:9092
    #--------------------------------------------------------#
    #Logstash says: Sending batch to Kafka failed. Will retry after a delay. {:batch_size=>1, :failures=>1, :sleep=>0.01}
    #advertised.listeners=PLAINTEXT://10.10.100.4:9092
    #listeners=PLAINTEXT://0.0.0.0:9092
    #--------------------------------------------------------#
    #Logstash says: Error while fetching metadata with correlation id 1 : {tagger=LEADER_NOT_AVAILABLE}
    #advertised.listeners=PLAINTEXT://publicip:9092
    #listeners=PLAINTEXT://0.0.0.0:9092
    #--------------------------------------------------------#
    #Logstash says: Error while fetching metadata with correlation id 1 : {tagger=LEADER_NOT_AVAILABLE}
    #advertised.listeners=PLAINTEXT://publicip:9092,SEC://10.10.100.4:9093
    #listeners=PLAINTEXT://0.0.0.0:9092,SEC://10.10.100.4:9093
    #--------------------------------------------------------#
    #Logstash says: Error while fetching metadata with correlation id 1 : {tagger=LEADER_NOT_AVAILABLE}
    advertised.listeners=PLAINTEXT://publicip:9092
    advertised.hostname=dnsname.com
    

    最后,以下是我在Azure环境中的同一个子网中运行Logstash和Kafka时使用的配置:

    listeners=PLAINTEXT://10.10.100.4:9092,SSL://10.10.100.4:9093
    advertised.listeners=PLAINTEXT://10.10.100.4:9092,SSL://10.10.100.4:9093
    

    这快把我逼疯了,谢谢你在我继续寻找的时候提供的帮助

    1 回复  |  直到 7 年前
        1
  •  0
  •   pm1391    7 年前

    我想出来了。如果您遇到此问题,并且您的错误与上面日志存储端的错误类似,请检查kafka日志目录,其中有一个名为“controller.log”的文件。

    以下是我遇到的错误:

    WARN [Controller-1-to-broker-1-send-thread]: Controller 1's connection to broker MYDOMAINNAME:9092 (id: 1 rack: null) was unsuccessful (kafka.controller.RequestSe$
    java.net.SocketTimeoutException: Failed to connect within 30000 ms
    

    我跑了 netcat -z -v DOMAINNAME 9092 没有回应。我将域名添加到 /etc/hosts 。在本地主机(127.0.0.1)上运行zookeeper时,看起来是这样的。我很确定zookeeper无法解析它,所以我将它映射回我的本地主机。

    127.0.0.1 MYDOMAIN。com公司

    然后我删除了中的所有内容 /tmp/kafka-logs (小心,丢失所有数据),然后重新启动服务器和zookeeper,现在一切正常。 多痛苦啊