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)]](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2UyYjUyMmE0YjU3ODRkZjQ4YzEwZjY4ZGEzNDQ3YjhmLnBuZw==.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)]](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2M4NGRkOTUzZTQxOTQxM2RhNDNmYzE1ZDcyNDgyYjVlLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3dhdGVybWFyayx0eXBlX1ptRnVaM3BvWlc1bmFHVnBkR2ssc2hhZG93XzEwLHRleHRfYUhSMGNITTZMeTlpYkc5bkxtTnpaRzR1Ym1WMEwxTmhlVk41WVc0PSxzaXplXzE2LGNvbG9yX0ZGRkZGRix0Xzcw.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)]](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuLzA1MDA5ZTMzMDY5MDQwZTZiNThkMTY0OTMwZGE1YTE5LnBuZw==.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)]](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2FkMWE5YTIwOTQ4NjRjMzA5YjlmMGU1NmNmNjdlYzNjLnBuZw==.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)]](/image/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuL2U3OGEzOGVjNzA4ZTQzYzNiYWY1YjViNDZkYTg0YmRlLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3dhdGVybWFyayx0eXBlX1ptRnVaM3BvWlc1bmFHVnBkR2ssc2hhZG93XzEwLHRleHRfYUhSMGNITTZMeTlpYkc5bkxtTnpaRzR1Ym1WMEwxTmhlVk41WVc0PSxzaXplXzE2LGNvbG9yX0ZGRkZGRix0Xzcw.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

測試通過!
