Kafka叢集部署(使用自帶的zookeeper) JDK的安裝配置(Windows、Linux)
Kafka2.8版本才開始自帶了Zookeeper,所以注意下版本
kafka官網:http://kafka.apache.org/
kafka配置快速入門:http://kafka.apache.org/quickstart
kafka下載頁面:http://kafka.apache.org/downloads
服務規劃
Kafka叢集部署
注意事項:
- 叢集的數量不是越多越好,最好不要超過 7 個,因為節點越多,訊息複製需要的時間就越長,整個群組的吞吐量就越低。
- 叢集數量最好是單數,因為超過一半故障叢集就不能用了,設定為單數容錯率更高。
該部署以Red Hat 7為例
1.關閉防火牆和SELinux(所有裝置)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vi /etc/selinux/config
SELINUX=enforcing改為SELINUX=disabled
2.安裝JDK(所有裝置)
安裝kafka前需要先安裝jdk,可參考我之前編寫的JDK的安裝配置(Windows、Linux),不過kafka好像已經宣佈了即將棄用對java8的支援,所以在未來版本,肯定也就不能安裝java8版本了
3.配置IP地址和主機名之間的對映(所有裝置)
vim /etc/hosts
192.168.36.152 node1 192.168.36.153 node2 192.168.36.154 node3
4.配置主機名(所有裝置)
vim /etc/sysconfig/network
NETWORKING=yes hostname=主機名
hostnamectl set-hostname 主機名
需重啟裝置使配置生效:init 6
5.安裝Kafka(192.168.36.152)
解壓安裝包
tar -zxvf kafka_2.13-3.1.1.tgz -C /usr/local/
配置Kafka自帶的zookeeper配置檔案
cd /usr/local/kafka_2.13-3.1.1/config/
vim zookeeper.properties
#dataDir是zookeeper持久化資料存放的目錄 dataDir=/usr/local/kafka_2.13-3.1.1/zookeeper dataLogDir=/usr/local/kafka_2.13-3.1.1/datalog clientPort=2181 maxClientCnxns=100 #配置單元時間。這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。 tickTime=20 #節點的初始化時間。這裡指的是Zookeeper伺服器叢集中連線到Leader的Follower伺服器,當已經超過指定的心跳的時間長度後,zookeeper 伺服器還沒有收到客戶端的返回資訊,那麼表明這個客戶端連線失敗。該引數是引數tickTime的5倍,也就是說總的時間長度就是 10*2000=20 秒 initLimit=10 #心跳最大延遲週期。這個配置項標識 Leader 與Follower 之間傳送訊息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5*2000=10秒 syncLimit=5 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
mkdir -p /usr/local/kafka_2.13-3.1.1/zookeeper
mkdir -p /usr/local/kafka_2.13-3.1.1/datalog
配置Zookeeper的id
cd /usr/local/kafka_2.13-3.1.1/zookeeper
vim myid
#myid對應zoo.cfg配置檔案裡相應的server號,node1也就會是1,node2是2,node3則是3 1
配置Kafka配置檔案
vim server.properties
#各節點不可重複,唯一標識
broker.id=1 #本地IP地址,這裡我寫的本地域名 listeners=PLAINTEXT://node1:9092 #本地IP地址,這裡我寫的本地域名 advertised.listeners=PLAINTEXT://node1:9092 log.dirs=/usr/local/kafka_2.13-3.1.1/kafka-log zookeeper.connect=node1:2181,node2:2181,node3:2181
mkdir /usr/local/kafka_2.13-3.1.1/kafka-log
將Kafka檔案進行分發給其他節點
scp -r /usr/local/kafka_2.13-3.1.1/ root@node2:/usr/local/
scp -r /usr/local/kafka_2.13-3.1.1/ root@node3:/usr/local/
然後其他節點需要修改的幾個地方就是zookeeper的myid檔案,kafka配置檔案中的broker.id,listeners,advertised6.啟動Zookeeper和Kafka(所有裝置)
啟動zookeeper
cd /usr/local/kafka_2.13-3.1.1/bin
nohup ./zookeeper-server-start.sh ../config/zookeeper.properties > /usr/local/kafka_2.13-3.1.1/zookeeper.log 2>&1 &
tail -f /usr/local/kafka_2.13-3.1.1/zookeeper.log
#這裡要注意看下日誌有沒有特殊報錯,若日誌提示WARN: Read timed out的話是因為zookeeper其他節點還沒啟動,全部啟動則不會有該提示了
jps命令檢視,看到QuorumPeerMain即可,QuorumPeerMain是zookeeper叢集的啟動類,用來載入配置啟動QuorumPeer執行緒的
10451 QuorumPeerMain 10622 Jps
啟動Kafka
cd /usr/local/kafka_2.13-3.1.1/bin
nohup ./kafka-server-start.sh ../config/server.properties > /usr/local/kafka_2.13-3.1.1/kafka.log 2>&1 &
jps命令檢視
11027 QuorumPeerMain 12263 Kafka 12347 Jps