kafka原始碼編譯安裝

準備三臺伺服器

  1. 192.168.xxx.xxx
  2. 192.168.xxx.xxx
  3. 192.168.xxx.xxx

安裝kafka前需先安裝JDK和zookeeper如下步驟:

JDK配置安裝

官網地址(https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html)

下載檔案到本地,通過遠端工具上載檔案到伺服器自定義目錄

解壓檔案到指定目錄(所有節點機器都做,也可忽略後面做節點複製)

  1. tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/local/ #解壓檔案到指定目錄
  2. mv jdk1.8.0_291/ java #修改檔名
  3. cd java

配置環境變數

  1. vi etc/profile
  2. 末尾新增如下內容:
  3. export JAVA_HOME=/usr/local/java
  4. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  5. export PATH=$PATH:$JAVA_HOME/bin

使配置檔案生效

  1. source /etc/profile

檢查驗證

  1. java -version

zookeeper 配置安裝

官網下載地址(https://zookeeper.apache.org/releases.html)

下載原始碼包檔案到本地通過遠端連線工具上載檔案到伺服器

解壓檔案

推薦下載編譯後的bin原始碼包

  1. tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/
  2. mv apache-zookeeper-3.7.0-bin/ zookeeper

建立檔案目錄用於存放資料

  1. cd /usr/local/zookeeper
  2. mkdir data #存放資料
  3. mkdir logs #存放日誌檔案

進入conf資料夾,將zoo_sample.cfg改為zoo.cfg

  1. cd /usr/local/zookeeper/conf
  2. mv zoo_sample.cfg zoo.cfg

修改配置檔案引數

  1. vi zoo.cfg
  2. #The number of milliseconds of each tick
  3. tickTime=2000 #伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,每隔tickTime時間就會發送一個心跳。
  4. #The number of ticks that the initial
  5. #synchronization phase can take
  6. initLimit=10 #配置 Zookeeper 接受客戶端(此客戶端不是使用者連線 Zookeeper 伺服器的客戶端,而是 Zookeeper 伺服器叢集中連線到 Leader 的 Follower 伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。當已超過initLimit個tickTime長度後 Zookeeper 伺服器還沒有收到客戶端的返回資訊,則表明客戶端連線失敗。總的時間長度就是 initLimit * tickTime 秒。
  7. #The number of ticks that can pass between
  8. #sending a request and getting an acknowledgement
  9. syncLimit=5 #配置 Leader 與 Follower 之間傳送訊息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 syncLimit * tickTime 秒。
  10. #the directory where the snapshot is stored.
  11. #do not use /tmp for storage, /tmp here is just
  12. #example sakes.
  13. dataDir=/usr/local/zookeeper/data #Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。
  14. dataLogDir=/usr/local/zookeeper/logs #dataLogDir:若沒提供的話則用dataDir。zookeeper的持久化都儲存在這兩個目錄裡。dataLogDir裡是放到的順序日誌(WAL)。而dataDir裡放的是記憶體資料結構的snapshot,便於快速恢復。為了達到效能最大化,一般建議把dataDir和dataLogDir分到不同的磁碟上,以充分利用磁碟順序寫的特性。
  15. #the port at which the clients will connect
  16. clientPort=2181 #Zookeeper伺服器監聽的埠,以接受客戶端的訪問請求。
  17. #the maximum number of client connections.
  18. #increase this if you need to handle more clients
  19. #maxClientCnxns=60
  20. #Be sure to read the maintenance section of the
  21. administrator guide before turning on autopurge.
  22. #http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  23. #The number of snapshots to retain in dataDir
  24. #autopurge.snapRetainCount=3
  25. Purge task interval in hours
  26. Set to "0" to disable auto purge feature
  27. #autopurge.purgeInterval=1
  28. Metrics Providers
  29. #https://prometheus.io Metrics Exporter
  30. #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
  31. #metricsProvider.httpPort=7000
  32. #metricsProvider.exportJvmInfo=true
  33. #zookeeper叢集配置資訊
  34. server.1=192.168.xxx.xxx:2888:3888 ###注:192.168.xxx.xxx:2888:3888後面一定不要有空格,否則會報錯
  35. server.2=192.168.xxx.xxx:2888:3888
  36. server.3=192.168.xxx.xxx:2888:3888
  37. #server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號伺服器;B 是這個伺服器的 ip 地址;C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的埠;D 表示的是萬一叢集中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的 Leader,此埠就是用來執行選舉時伺服器相互通訊的埠。如果是偽叢集的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 例項通訊埠號不能一樣,所以要給它們分配不同的埠號。2888埠是zookeeper服務相互通訊使用的,3888埠是zookeeper服務選舉使用的

預設埠說明:

新增myid檔案

說明:除了修改 zoo.cfg 配置檔案,叢集模式下還要新增一個名叫myid的檔案,這個檔案放在上述dataDir指定的目錄下,這個檔案裡面就只有一個數據,就是上圖配置中server.x的這個x(1,2,3)值,zookeeper啟動時會讀取這個檔案,拿到裡面的資料與 zoo.cfg 裡面的配置資訊比較從而判斷到底是那個server(節點)。

  1. cd /usr/local/zookeeper/data
  2. vi myid



將配置好的zookeeper 複製到其他叢集節點上

  1. scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper
  2. scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper
  3. scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper
  4. ##複製安裝完成的java 到其它叢集節點(如已完成JDK安裝請忽略)
  5. scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
  6. scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
  7. scp -r /usr/local/java/ root@192.168.xxx.xxx:/usr/local/java
  8. ## 配置其它叢集節點java環境變數
  9. vi /etc/profile
  10. export JAVA_HOME=/usr/local/java
  11. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  12. export PATH=$PATH:$JAVA_HOME/bin

注:分別修改服務節點的myid 值(與上述server所對應伺服器一致如:server.1=192.168.238.128則對應伺服器的myid為1以次類推)

  1. vi /usr/local/zookeeper/data/myid ## 所有機器

啟動節點(所有機器執行下述操作)

  1. cd /usr/local/zookeeper/bin

  1. ./zkServer.sh start #啟動命令
  2. ./zkServer.sh status # 檢視執行狀態



啟動完成顯示如上

檢視各節點狀態

192.168.xxx.xxx

192.168.xxx.xxx

192.168.xxx.xxx

kafka配置安裝

官網地址下載(http://kafka.apache.org/downloads)

上載檔案到伺服器指定目錄

  1. cd /usr/local/src/tool/

解壓檔案

  1. tar -zxvf kafka_2.13-2.8.0.tgz -C /usr/local/
  2. mv kafka_2.13-2.8.0/ kafka
  3. cd kafka/
  4. mkdir kafka-logs //儲存日誌檔案目錄 非必須建立

解壓後文件目錄

cd /usr/local/kafka

修改配置檔案

  1. cd /usr/local/kafka/config

修改server.properties配置檔案

在server.properties中主要修改如下配置:

  1. broker.id=1 //每個kafka伺服器的唯一識別id 預設為0
  2. listeners=PLAINTEXT://192.168.xxx.xxx:9092 //去掉註釋配置為本機ip
  3. listeners=PLAINTEXT://:9092 //kafka對外提供服務的預設埠
  4. log.dirs=/usr/local/kafka/kafka-logs //非必須可選擇修改 如需要改需手動建立對應檔案目錄
  5. zookeeper.connect=192.168.xxx.xxx:2181,192.168.xx.xxx:2181,192.168.xx.xx:2181 //zookeeper叢集用逗號隔開

將kafka目錄分發到各節點

  1. scp -r kafka/ root@192.168.xxx.xxx:/usr/local/kafka/
  2. scp -r kafka/ root@192.168.xxx.xxx:/usr/local/kafka/

按上述修改如上配置

啟動kafka(所有節點)

  1. 進入bin目錄
  2. cd /usr/local/kafka/bin
  3. ./kafka-server-start.sh -daemon ../config/server.properties
  4. jps //驗證

檢查埠

  1. netstat -tlnp

測試

1.檢視topic 列表

  1. bin/kafka-topics.sh --list --zookeeper 192.168.xx.xx:2181
  2. //這裡的ip對應server.properties 配置所在伺服器埠 /新安裝配置的kafka下無資料

2.建立topic

  1. bin/kafka-topics.sh --describe --zookeeper 192.168.xxx.xxx:2181 --topic test //建立topic 取名test

3.在其中一臺伺服器上建立生產者

  1. bin/kafka-console-producer.sh --broker-list 192.168.xx.xx:9092,192.168.xxx.xxx:9092,192.168.xxx.xxx:9092 --topic test

4.在另外兩臺伺服器建立消費者

  1. ./kafka-console-consumer.sh --bootstrap-server 192.168.xxx.xxx:9092,192.168.xxx.xxx:9092,192.168.xxx.xxx:9092 --topic test --from-beginning



測試通過!