1. 程式人生 > >kafka啟動報錯記錄:Connection to node 0 could not be established. Broker may not be available.

kafka啟動報錯記錄:Connection to node 0 could not be established. Broker may not be available.

環境說明:

CentOS Linux release 7.4.1708 (Core)
Linux核心:3.10.0-693.el7.x86_64
java: openjdk version “1.8.0_181”
kafka: kafka_2.11-2.0.0
zookeeper: zookeeper-3.4.10

操作流程:

  1. 首先啟動zookeeper(使用預設配置)

    #首先要進入zookeeper根目錄
    bin/zkServer.sh start
    

    上面啟動正常。

  2. 再啟動kafka(使用預設配置)

    #首先要進入kafka根目錄
    bin/kafka-server-start.sh config/server.properties
    

    發現有警告:

    WARN [Controller id=0, targetBrokerId=0] Connection to node 0 could not be established. Broker may  not be available. (org.apache.kafka.clients.NetworkClient)
    

    對於第一次用這個kafka的我來說,不懂。 然後有人說看下controller的日誌(kafka_2.11-2.0.0/logs/controller.log),發現有報錯:

    WARN [RequestSendThread controllerId=0] Controller 0's connection to broker   www.gl.com:9092 (id: 0 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
    java.io.IOException: Connection to www.gl.com:9092 (id: 0 rack: null) failed.
        at  org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:70)
        at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:279)
        at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:233)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
    

    我什麼都沒配置怎麼有一個www.gl.com?後來發現, 自己在安裝系統的時候, 有設定系統的域名為gl.com(可用hostname命令檢視本地域名)。

    $ hostname
    gl.com
    

    理解應該是對kafka使用預設配置啟動,它會讀到本機的主機資訊為gl.com, 但是為什麼多了個www就不知道了,希望有同學能解惑。

    怎麼解決呢?想到之前自己為了做實驗,在hosts檔案中新增過www.gl.com, 不知道和上面的報錯有沒有關係。
    開啟/etc/hosts檔案

    127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1          localhost localhost.localdomain localhost6 localhost6.localdomain6
    

    改成(注意每個後面多了 gl.com,其實只給第一行加也可以的):

    127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4 gl.com
    ::1          localhost localhost.localdomain localhost6 localhost6.localdomain6 gl.com
    

    然後使用預設啟動就不報錯了。

  3. 測試
    可以來測試下kafka能不能正常工作(在kafka根目錄執行):可以來測試下kafka能不能正常工作(在kafka根目錄執行):

        # 建立topic, 名稱為testTopic
        bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testTopic
    
        # 檢視topic(會發現除了testTopic,還有KafkaPushsTopic
        bin/kafka-topics.sh --list --zookeeper localhost:2181
    
        # 啟動消費者(Consumer, 發現“卡住了”,其實它是在等訊息,不要關這個視窗)
        bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testTopic --from-beginning
    
        # 啟動生產者(Producer, 新視窗啟動)
        bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic
    

    啟動生產者後發現進入了互動模式,這時就可以發訊息了。
    截圖如下:

    在這裡插入圖片描述

    參考:
    http://kafka.apache.org/quickstart

    歡迎補充指正!