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
將配置好的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
./zkServer.sh start #啟動命令
./zkServer.sh status # 檢視執行狀態
啟動完成顯示如上
檢視各節點狀態
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 //驗證
檢查埠
netstat -tlnp
測試
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
測試通過!