接下去需要通過kafka傳送數據,剛剛同事在cdh中新建的kafka,我想在裏面創建topic。直接上手:
kafka-topics --zookeeper localhost:2181 --create -replication-factor 1 --partitions 3 --topic test
CDH中使用kafka指令跟kafka文檔中說明的指令不一樣,具體可以看這篇博文。 ——> CDH 中 kafka 的使用注意
一、遇到第一個問題
結果報錯了,具體錯誤信息如下:
Error while executing topic command : Replication factor: 1 larger than available brokers: 0.
[2019-11-27 20:48:18,659] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0.
(kafka.admin.TopicCommand$)
二、問題解決
問了度娘,有人遇到這個問題,需要看 CDH 中 kafka broker 的屬性:zookeeper.chroot 這個屬性與 kafka 創建 topic 後,信息存放的路徑有關。然後我看了看同事配置的CDH中的 zookeeper.chroot 屬性,原來是/kafka。如下圖:
如果這裏設置 zookeeper.chroot 爲 /kafka。那麼對應的,我們需要在/kafka 路徑下創建topic。所以創建topic指令如下:
kafka-topics --zookeeper localhost:2181/kafka --create -replication-factor 1 --partitions 3 --topic test
我們只需在localhost:2181後加 /kafka 即可。
三、遇到的第二個問題
然後再次運行,執行後創建時topic是創建成功了,但是又報了一個異常:
[2019-11-27 20:52:44,290] WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
Created topic test.
四、問題解決
這裏我想了想還是查看一下 server.properties 配置文件。
這個配置文件在安裝的 /opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/etc/kafka/conf.dist 目錄下,具體看自己CDH安裝kafka的路徑。我的路徑如下 :
打開看到我們的具體配置信息:
excuse me? 這裏的 zookeeper.connect 竟然是 localhost:2181,難怪會出警告了。
修改成 zookeeper.connect=localhost:2181/kafka 保存。
然後我們再重新創建一個新的主題test1:
直接創建成功,不報錯無異常。