1. 程式人生 > 其它 >Kafka叢集部署(使用自帶的zookeeper) JDK的安裝配置(Windows、Linux)

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,advertised

6.啟動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