Windows環境下安裝調試Kafka + ZooKeeper以及報錯記錄

最近在學習用Jmeter對Kafka進行壓測,所以安裝Kafka軟件肯定必不可少了。在安裝調試的過程中也有遇到一些問題,在此記錄一下。

下載

我下載的是ZooKeeper 3.5.7和最新的Kafka 2.13-2.4.1

 

安裝

ZooKeeper

1.解壓ZooKeeper壓縮包並放在系統盤的某個位置,我這裏是放在D盤的根目錄下;

2.新增一個系統變量“ZOOKEEPER_HOME”,並且在Path路徑裏面新增“%ZOOKEEPER_HOME%\bin;”,如下圖所示:

3.進入ZooKeeper的conf文件夾,找到zoo_sample.cfg文件,重命名爲zoo.cfg;

4.用文本編輯器打開zoo.cfg文件,找到dataDir並編輯它的值,我這裏是改成:dataDir=D:/apache-zookeeper-3.5.7/data;

Kafka

1.解壓Kafka壓縮包並放在系統盤的某個位置,我這裏是放在D盤的根目錄下;

2.進入D:\kafka_2.13-2.4.1\config,找到server.properties文件並用文本編輯器打開;

3.找到log.dirs並編輯它的值,我這裏是改成:log.dirs=./logs;

4.找到zookeeper.properties文件並用文本編輯器打開,找到dataDir並編輯它的值,要注意的是,這個值要和我們在zoo.cfg中的值一致,所以同樣更改爲dataDir=D:/apache-zookeeper-3.5.7/data。

調試

1.啓動ZooKeeper:cmd打開運行,輸入並執行zkserver,如下圖所示,表示啓動成功:

注:不要關閉這個ZooKeeper的cmd

2.啓動Kafka

(1)cmd打開運行,進入kafka文件目錄:cd D:\kafka_2.13-2.4.1

(2)輸入並執行:  .\bin\windows\kafka-server-start.bat .\config\server.properties,如下圖所示表示啓動成功:

注:不要關閉這個Kafka的cmd

3.創建一個名爲“TestTopic”的主題

(1)cmd打開運行,進入Kafka的window目錄:cd D:\kafka_2.13-2.4.1\bin\windows
(2)輸入並執行:kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TestTopic,如下圖所示表示創建成功:

4.創建一個生產者Producer

(1)cmd打開運行,進入Kafka的window目錄:cd D:\kafka_2.13-2.4.1\bin\windows
(2)輸入並執行:kafka-console-producer.bat --broker-list localhost:9092 --topic TestTopic

如果輸入一個錯誤的主題名稱會怎樣?樓主就犯了,然後就會看到下圖所示:

注:Topic名稱必須和我們創建過的Topic名稱一致

5.創建一個消費者Consumer

(1)cmd打開運行,進入Kafka的window目錄:cd D:\kafka_2.13-2.4.1\bin\windows
(2)輸入並執行:kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

注:Topic名稱必須和我們創建過的Topic名稱一致

按照上面的步驟,安裝軟件和單機測試Kafka就算是順利通過了。

報錯記錄

1.使用zkserver命令啓動ZooKeeper報錯:'zkserver' 不是內部或外部命令,也不是可運行的程序或批處理文件。

報錯原因:這個報錯原因還蠻多的,比如說環境變量配置錯了,還有沒有裝jdk,當然如果環境變量和jdk都沒有問題,那我猜可能是異常關閉導致的。

解決方法:檢查一下環境變量,命令行輸入java -version看看是不是報“java不是內部命令。。。”,最後一個就是,進入zookeeper的bin文件目錄,運行zkServer.cmd,具體如下:

cd D:\apache-zookeeper-3.5.7\bin
zkServer.cmd

2.啓動ZooKeeper時報錯:'wmic' 不是內部或外部命令,也不是可運行的程序或批處理文件

解決方法:先去查看C盤下是不是有“C:\WINDOWS\system32\wbem”這個文件夾,如果有的話,查看環境變量中的系統變量,找到“%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;”,如果沒有就添加保存,然後重啓ZooKeeper。

3.啓動ZooKeeper報錯,報錯內容如下:

ERROR [main:QuorumPeerMain@89] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing D:\apache-zookeeper-3.5.7\bin\..\conf\zoo.cfg
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:113)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Caused by: java.lang.IllegalArgumentException: D:\apache-zookeeper-3.5.7\bin\..\conf\zoo.cfg file is missing
        at org.apache.zookeeper.server.util.VerifyingFileFactory.doFailForNonExistingPath(VerifyingFileFactory.java:51)
        at org.apache.zookeeper.server.util.VerifyingFileFactory.validate(VerifyingFileFactory.java:45)
        at org.apache.zookeeper.server.util.VerifyingFileFactory.create(VerifyingFileFactory.java:40)
        at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:141)
        ... 2 more
Invalid config, exiting abnormally

報錯原因:非法配置,找不到zoo.cfg文件,這個肯定是因爲沒有把zoo_sample.cfg重命名爲zoo.cfg。

4.啓動Kafka報錯:kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING

報錯原因:我的ZooKeeper版本和Kafka版本不對應,之前我下載的是ZooKeeper3.6.0版本。

解決辦法:下載對應的版本,當然如果大家不知道下載的Kafka具體對應的是哪個版本的ZooKeeper,可以進入Kafka的libs目錄下查看對應的zookeeper jar包,如圖所示,說明對應要下載3.5.7版本的ZooKeeper:

5.Kafka啓動時報錯,報錯內容如下:

ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
kafka.common.InconsistentClusterIdException: The Cluster ID 8iDlG8QcQYCDhABZPB7qqQ doesn't match stored clusterId Some(-11r4H8aSLSBuF88Hj7TBQ) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.
        at kafka.server.KafkaServer.startup(KafkaServer.scala:220)
        at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:44)
        at kafka.Kafka$.main(Kafka.scala:84)
        at kafka.Kafka.main(Kafka.scala)

解決方法:刪除配置文件server.properties中的參數log.dirs路徑下的全部文件,重新啓動Kafka。

6、啓動Kafka時報錯:Error occurred during initialization of VM

Could not reserve enough space for 1048576KB object heap

解決方法:在Kafka的windows路徑下找到kafka-server-start.bat文件,用編輯器打開它,可以看到如下圖所示的一段配置:

IF NOT ERRORLEVEL 1 (
        rem 32-bit OS
        set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M
    ) ELSE (
        rem 64-bit OS
        set KAFKA_HEAP_OPTS=-Xmx1G -Xms1G
    )

因爲是64位的電腦,所以把KAFKA_HEAP_OPTS調小了一點,改成512M,即“set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M”,保存之後,重啓Kafka。

7.創建消費者報錯,錯誤如下:

WARN [Consumer clientId=consumer-console-consumer-33579-1, groupId=console-consumer-33579] Error while fetching metadata with correlation id 2 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Processed a total of 0 messages

這是因爲我用了個沒創建的Topic,並且創建的生產者的Topic也與它不同。

解決方法:重新創建一個Topic正確的消費者。

8.如果我沒有創建某個Topic,而創建的生產者和消費者使用了同一個Topic,居然也可以發送消息,如下圖所示:

不知道這是什麼原理,如果有大神知道的話麻煩解答一下,感謝~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章