linux 原始碼搭建Kafka叢集,100%有效

藥罐發表於2021-08-17

kafka原始碼編譯安裝

準備三臺伺服器

	192.168.xxx.xxx
	192.168.xxx.xxx
	192.168.xxx.xxx

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

JDK配置安裝

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

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

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

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

在這裡插入圖片描述

配置環境變數

vi etc/profile

末尾新增如下內容:

export JAVA_HOME=/usr/local/java        
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

使配置檔案生效

source /etc/profile

檢查驗證

java -version

在這裡插入圖片描述

zookeeper 配置安裝

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

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

解壓檔案

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

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

mv apache-zookeeper-3.7.0-bin/ zookeeper

在這裡插入圖片描述

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

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

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

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

修改配置檔案引數

vi zoo.cfg

#The number of milliseconds of each tick

tickTime=2000  #伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,每隔tickTime時間就會傳送一個心跳。

#The number of ticks that the initial

#synchronization phase can take

initLimit=10    #配置 Zookeeper 接受客戶端(此客戶端不是使用者連線 Zookeeper 伺服器的客戶端,而是 Zookeeper 伺服器叢集中連線到 Leader 的 Follower 伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。當已超過initLimit個tickTime長度後 Zookeeper 伺服器還沒有收到客戶端的返回資訊,則表明客戶端連線失敗。總的時間長度就是 initLimit * tickTime 秒。

#The number of ticks that can pass between

#sending a request and getting an acknowledgement

syncLimit=5  #配置 Leader 與 Follower 之間傳送訊息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 syncLimit * tickTime 秒。

#the directory where the snapshot is stored.

#do not use /tmp for storage, /tmp here is just

#example sakes.

dataDir=/usr/local/zookeeper/data #Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。
dataLogDir=/usr/local/zookeeper/logs #dataLogDir:若沒提供的話則用dataDir。zookeeper的持久化都儲存在這兩個目錄裡。dataLogDir裡是放到的順序日誌(WAL)。而dataDir裡放的是記憶體資料結構的snapshot,便於快速恢復。為了達到效能最大化,一般建議把dataDir和dataLogDir分到不同的磁碟上,以充分利用磁碟順序寫的特性。
#the port at which the clients will connect
clientPort=2181   #Zookeeper伺服器監聽的埠,以接受客戶端的訪問請求。
#the maximum number of client connections.

#increase this if you need to handle more clients

#maxClientCnxns=60
#Be sure to read the maintenance section of the

administrator guide before turning on autopurge.

#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

Purge task interval in hours

Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

Metrics Providers

#https://prometheus.io Metrics Exporter

#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
#zookeeper叢集配置資訊        
server.1=192.168.xxx.xxx:2888:3888     ###注:192.168.xxx.xxx:2888:3888後面一定不要有空格,否則會報錯
server.2=192.168.xxx.xxx:2888:3888
server.3=192.168.xxx.xxx:2888:3888
#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(節點)。

cd /usr/local/zookeeper/data
vi myid

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-7JJoAxgE-1629162748604)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210806213748986.png)]
將配置好的zookeeper 複製到其他叢集節點上

scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper

scp -r /usr/local/zookeeper/ root@192.168.xxx.xxx:/usr/local/zookeeper

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

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

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

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

cd  /usr/local/zookeeper/bin

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-WuEQ7ICB-1629162748605)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210806215234596.png)]

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-3adbsrY3-1629162748607)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811193047096.png)]
啟動完成顯示如上

檢視各節點狀態

192.168.xxx.xxx

在這裡插入圖片描述

192.168.xxx.xxx

在這裡插入圖片描述

192.168.xxx.xxx

在這裡插入圖片描述

kafka配置安裝

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

在這裡插入圖片描述

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

cd /usr/local/src/tool/

解壓檔案

tar -zxvf kafka_2.13-2.8.0.tgz -C /usr/local/

mv kafka_2.13-2.8.0/ kafka
cd kafka/
mkdir kafka-logs //儲存日誌檔案目錄 非必須建立

解壓後檔案目錄

cd /usr/local/kafka
在這裡插入圖片描述

修改配置檔案

cd /usr/local/kafka/config

在這裡插入圖片描述

修改server.properties配置檔案

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

在這裡插入圖片描述

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

將kafka目錄分發到各節點

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

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

按上述修改如上配置

啟動kafka(所有節點)

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

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-CJUxtFZ9-1629162748621)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811204516651.png)]

檢查埠

netstat -tlnp

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-GdFKsNCg-1629162748622)(kafka%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85.assets/image-20210811204620970.png)]

測試

1.檢視topic 列表

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

2.建立topic

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

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

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.在另外兩臺伺服器建立消費者

./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

在這裡插入圖片描述
測試通過!

相關文章