windows 10 環境下配置kafka,及我所遇到的坑


十年河東,十年河西,莫欺少年窮

學無止境,精益求精

CSDN上資源下載地址:https://download.csdn.net/download/wolongbb/15420395  【包括kafka /java8/ ZooKeeper】並且和本博客所用版本一致。

一、安裝JAVA JDK

1、下載安裝包

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

注意:根據32/64位操作系統下載對應的安裝包

2、添加系統變量:JAVA_HOME=C:\Java\jdk1.8.0_40

二、安裝ZooKeeper

kafka依賴ZooKeeper,因此,在啟動kafka之前,應先安裝啟動ZooKeeper,啟動ZooKeeper之前,應先配置ZooKeeper的環境變量。

1、 下載安裝包 http://zookeeper.apache.org/releases.html#download

2、 解壓並進入ZooKeeper目錄,我的目錄為:D:\tool\kafka\apache-zookeeper-3.6.2-bin

3、 在目錄中的conf文件夾中找到zoo_sample.cfg,並將“zoo_sample.cfg”重命名為“zoo.cfg”

4、 打開“zoo.cfg”找到並編輯  dataDir=./zookeeper-3.4.13/data

5、admin.serverPort端口默認為8080,如果8080被占用,需要指定admin.serverPort端口,在zoo.cfg最后一行增加:admin.serverPort=8001 

6、audit.enable 默認為 false,我們設置為 true,在zoo.cfg最后一行增加:audit.enable=true

7、添加系統變量:ZOOKEEPER_HOME=D:\tool\kafka\apache-zookeeper-3.6.2-bin

8、編輯path系統變量,添加路徑:%ZOOKEEPER_HOME%\bin

 

9、在zoo.cfg文件中修改默認的Zookeeper端口(默認端口2181),如果端口2181未被占用,則無需修改。

10、打開新的cmd,輸入“zkServer“,運行Zookeeper,cmd需要指定目錄:D:\tool\kafka\apache-zookeeper-3.6.2-bin 【注意:我的文件夾命名中帶有bin,而不是指向bin文件夾】,也可以在D:\tool\kafka\apache-zookeeper-3.6.2-bin 文件夾中,按住 shift 鍵,右鍵鼠標,打開:windows power shell。

11、按照第10步,輸入 zkServe 后,如果出現如下界面,則證明ZooKeeper啟動成功。

注意:不要關了這個窗口,啟動kafka時會用到。 

上述11個步驟中,我所遇到的坑如下:

坑1:

下載安裝包時,應下載命名中帶有bin的文件,不要去下載source文件,無論安裝ZooKeeper 還是 kafka 安裝路徑中都不要有空格。切記。要考。

 通過HTTP下載即可:

坑2:

我的服務器中,admin.serverPort 的默認端口8080被占用了,導致啟動時報錯,因此,我顯式指定了端口為:8001

坑3:

建議增加這個配置:audit.enable=true,關於這個配置,我並不知道干啥用的

三、安裝Kafka

1、 下載安裝包 :http://kafka.apache.org/downloads  【注意要下載二進制版本】

 

 

 

2、 解壓並進入Kafka目錄,我的路徑:D:\tool\kafka\kafka_2.12-2.7.0

3、 進入config目錄找到文件server.properties並打開

4、 找到並編輯:log.dirs=./logs

5、 找到並編輯zookeeper.connect=localhost:2181  【非集群部署的情況下,無需修改】

6、 Kafka會按照默認,在9092端口上運行,並連接zookeeper的默認端口:2181   【注意9092端口不應該被其他程序占用】

7、 進入Kafka安裝目錄D:\tool\kafka\kafka_2.12-2.7.0\bin\windows,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

kafka-server-start.bat ..\..\config\server.properties

 如果不行

請使用:

 .\kafka-server-start.bat ..\..\config\server.properties

 

 

 

 注意:不要關了這個窗口,啟用Kafka前請確保ZooKeeper實例已經准備好並開始運行

上述7個步驟中,我遇到的坑如下:

坑1、

環境變量Path要增加,如下截圖:

分別如下:

1、ZOOKEEPER_HOME ,kafka依賴,安裝ZooKeeper 時,就需要配置

%ZOOKEEPER_HOME%\bin

2、系統路徑,這個據說和 wbem 文件夾下的exe有關,沒有的話,加上這兩個系統路徑變量

C:\Windows\System32
C:\Windows\System32\wbem

3、據說和啟動kafka有關,經過我的測試,應該沒關系,不管有沒有關系,加上保險一點。

D:\tool\kafka\kafka_2.12-2.4.0\bin\windows

坑2

進入Kafka安裝目錄D:\tool\kafka\kafka_2.12-2.7.0\bin\windows,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:kafka-server-start.bat ..\..\config\server.properties

但:

好多博客上都是進入D:\tool\kafka\kafka_2.12-2.7.0 安裝路徑 ,然后執行:
.\bin\windows\kafka-server-start.bat .\config\server.properties 

但,在我測試的過程中,執行 .\bin\windows\kafka-server-start.bat .\config\server.properties  無任何響應。

通用啟動方式:

通用啟動方式【統一在kafka文件夾中啟動,利用自帶的bat文件】

最后按照知乎作者的方案,通過kafka自帶的bat文件啟動相關服務:

 

它們都需要進入 D:\tool\kafka\kafka_2.12-2.7.0 目錄,然后再啟動相應的命令。

cd D:\kafka_2.11-2.4.0
啟動zookeeper服務,運行命令:

bin\windows\zookeeper-server-start.bat config\zookeeper.properties
啟動kafka服務,運行命令:

bin\windows\kafka-server-start.bat config\server.properties

 

 

 

四、測試

(linux直接在bin目錄下.sh,windows需要進入bin\winndows下的.bat)

 

1、 創建主題,進入Kafka安裝目錄D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

clip_image005

注意:不要關了這個窗口

2、查看主題輸入:

.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181

clip_image007

3、 創建生產者,進入Kafka安裝目錄D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

image

注意:不要關了這個窗口

4、 創建消費者,進入Kafka安裝目錄D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

此時,往生產者窗口寫入消息,消費者窗口也能同步的接收到消息

image

5、查看topic,進入Kafka安裝目錄D:\Kafka\kafka_2.12-0.11.0.0,按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行,輸入:

  1.  
    .\ bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic
  2.  
    test

6、 重要(操作日志的處理):
kafka啟動后,如果你去查看kafka所在的根目錄,或者是kafka本身的目錄,會發現已經默認生成一堆操作日志(這樣看起來真心很亂):

而且會不斷生成不同時間戳的操作日志。剛開始不知所措,一番研究后,看了啟動的腳本內容,發現啟動的時候是會默認使用到這個log4j.properties文件中的配置,而在zoo.cfg是不會看到本身的啟動會調用到這個,還以為只有那一個日志路徑:

在這里配置一下就可以了,找到config下的log4j.properties:

zookeeper.log.dir=D:\tool\kafkaLogs

將路徑更改下即可,這樣就可以歸檔在一個文件夾下邊了,路徑根據自己喜好定義:

另外如何消除不斷生成日志的問題,就是同一天的不同時間會不停生成。

修改這里,還是在log4j.properties中:

本身都為trace,字面理解為會生成一堆跟蹤日志,將其改為INFO即可。

kafka server.properties 配置文件詳解(二)

   雖然在前面一部分我們啟動了kafka集群,並通過控制台的方式實現了producer和consumer,但是我們還是了解一下kafka單個節點是的配置參數屬性,

也只有了解了這些參數的配置,才能將kafka的性能發揮到最好。

  標紅部分為集群必配屬性,致於其它的參數配置等學完后再回過頭來看這些參數,你就知道是什么意思了

 
   1.broker.id
        broker.id=2  一般采用ip的后三位來用來標識是哪台kafka的broker,利於定位和排錯
    2.Prot
        tcp用來監控的kafka端口
        listeners=PLAINTEXT://192.168.43.17:9092
    3.Zookeeper.connect
       #kafka連接zk的集群,多個用”,”號隔開
      #zookeeper.connect=192.168.43.15:2181,192.168.43.16:2181,192.168.43.17:2181
      #但是這樣寫不是很友好,kafka在連上zk后,直接在zk的根目錄創建自己需要的文件夾,這樣會導致zk的根目錄也非常亂
     #同時如果有別的項目也在用zk創建1個controller目錄,kafka會產生一個controller的文件夾,這樣會導致混淆
     #如果需要部署2個獨立的kafka storm環境時,只有一個zk集群時
     #綜上所述,可以采用命名空間的方式解決以上問題:
      zookeeper.connect=192.168.43.15:2181,192.168.43.16:2181,192.168.43.17:2181/kafka_1(推薦使用這2種方式)
      zookeeper.connect=192.168.43.15:2181,192.168.43.16:2181,192.168.43.17:2181/kafka_2
  4.Log.dirs(commit log)
    #用來存儲日志的路徑,它上面存放了多個log segment,如果采用了磁盤陣列,路徑可以是多個
    #如果采用了多個存儲路徑,1個partition只能存放在1個路徑下,因為順序的磁盤讀寫操作速度  
    #可以接近隨機的內存讀寫速度
      log.dirs=/var/lib/kafka
  5.num.recovery.threads.per.data.dir=1     
    #kafka配置了1個線程池,當kafka啟動時打開每個segment,啟動失敗時檢查並截取每個segment
    #服務關閉時,關閉segments的句柄、管道的flush操作,
    num.recovery.threads.per.data.dir=1
     #注意是1個路徑默認是1個線程,如果log.dirs配置了3個路徑,那么將會有24個線程
   6.auto crteat.topics.enable(配置文件中沒有)
        #自動創建1個topic
        #當不存在1個topic時會創建,讀的時候會創建1個topic,通過api訪問元數據時,如果不存在會創建1個topic
        #但是這個創建的tpoic都是采用默認的配置,因此不建議使用
        # 一般情況下我們設置成false
   7.num.partitions
        #設置partitions 的個數
        num.partitions=1
   8.log.retention.ms
        #日志存放時間,依據是文件最后1次更新文件的時間,這個參數是針對broker的,按小時來算的
        log.retention.hours=168                
     #存放1個星期
   9.log.retention.bytes
        #partition保留數據的大小,這個參數是針對1個partitions 的
        #如果有8個partition,每個partition設置的是1GB,那最多存8GB的東西,超過了就會將老的數據刪除
        log.retention.bytes=1073741824
   10.log.segment.bytes
      #設置segment 片斷的大小,如果存放的達到了設置的大小,這個segment 將會關閉,並且將會
     #創建1個新的打開的segment,如果1個segment達到了設置的大小並且已關閉,那么這個segment是可
     #以被刪除的,如果這個segment設置的小,則會頻繁的創建segment,會影響kafka的性能,如果設置的較大
     #超過了log.retention.ms的保存時間,這樣會造成數據不一致或丟失的情況,因此,設置每個segment的
        #大小還是要根據業務量來判斷
       log.segment.bytes=1073741824
   11.log.segment.ms
        #另一種控制segments關閉的參數設置
        log.segment.ms
   12.message.max.bytes
        #發送信息的最大單位值,如果超過了,會造成數據丟失
        #如果要發送的數據量較大,可以調整這個參數和檢查發送數據量的
        message.max.bytes=1024
 

 

有不足之處,請各位看官批評指出,我將及時改正,以提高知識總結的正確性和嚴謹性,為大家學習提供方便!!! 如若轉載,請注明出處!!!

最后,提供下kafka可視化工具下載地址:https://download.csdn.net/download/wolongbb/15433836

參考文獻:

https://www.cnblogs.com/xuzimian/p/10138442.html  【我的成功所在】

https://blog.csdn.net/weixin_38004638/article/details/91893910 【CSDN】

https://stackoverflow.com/questions/58754086/answer/submit 【英文站點BBS】

https://zhuanlan.zhihu.com/p/101162159  【知乎】

https://www.cnblogs.com/MrRightZhao/p/11094680.html 【配置說明】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM