*kafka*依賴*zookeeper*,因此在安裝*kafka*之前先安裝*zookeeper*。
*kafka*和*zookeeper*均依賴*jvm*環境,因此需要先配置*jvm*環境,本文<u>默認*jvm*環境已經配置完成</u>。
本文服務器信息:*192.168.8.222*、*192.168.8.223*、*192.168.8.224*
#### 準備工作
為了端口可以通信,而且在內網環境,因此可直接關閉防火墻。
```bash
systemctl stop firewalld # 關閉防火墻
systemctl disable firewalld # 關閉開機時啟動防火墻
```
創建*/opt/pluto*目錄,計劃將軟件全部安裝在此目錄中。
```bash
mkdir -p /opt/pluto
```
#### *zookeeper*安裝
先在第一臺服務器上配置,再分發給其他服務器。
```bash
tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/pluto # 解壓壓縮包
```
```bash
mkdir -p /opt/pluto/zookeeper-3.4.14/data # 創建data目錄
```
```bash
cp /opt/pluto/zookeeper-3.4.14/conf/zoo_sample.cfg /opt/pluto/zookeeper-3.4.14/conf/zoo.cfg # cp
```

```bash
# 將dataDir=/tmp/zookeeper替換成dataDir=/opt/pluto/zookeeper-3.4.14/data
sed -i '/dataDir=\/tmp\/zookeeper/cdataDir=\/opt\/pluto\/zookeeper-3.4.14\/data' /opt/pluto/zookeeper-3.4.14/conf/zoo.cfg
```
在 *zoo.cfg* 文件的尾部添加集群信息,格式:*server.A=B:C:D*
```bash
echo "server.1=192.168.8.222:2888:3888" >>/opt/pluto/zookeeper-3.4.14/conf/zoo.cfg
echo "server.2=192.168.8.223:2888:3888" >>/opt/pluto/zookeeper-3.4.14/conf/zoo.cfg
echo "server.3=192.168.8.224:2888:3888" >>/opt/pluto/zookeeper-3.4.14/conf/zoo.cfg
```
*A*-節點編號 *B*-節點地址 *C*-選舉端口 *D*-數據同步端口
將配置完成的 */opt/pluto/zookeeper-3.4.14* 文件夾分發到另外兩臺服務器相同的位置。
```bash
scp -r /opt/pluto/zookeeper-3.4.14/ root@192.168.8.223:/opt/pluto/
scp -r /opt/pluto/zookeeper-3.4.14/ root@192.168.8.224:/opt/pluto/
```
最后,在每臺服務器的 */opt/pluto/zookeeper-3.4.14/data* 目錄中創建一個名為 *myid* 的文件,標識服務器身份。
```bash
echo "1" >/opt/pluto/zookeeper-3.4.14/data/myid # 在第1臺服務器上執行
```
```bash
echo "2" >/opt/pluto/zookeeper-3.4.14/data/myid # 在第2臺服務器上執行
```
```bash
echo "3" >/opt/pluto/zookeeper-3.4.14/data/myid # 在第3臺服務器上執行
```
至此,所有的*zookeeper*配置均已經完成。
啟動 *zookeeper* 服務,分別在服務器上執行啟動命令:
```bash
cd /opt/pluto/zookeeper-3.4.14/ # 此步驟是為了使zookeeper.out文件創建在zookeeper-3.4.14目錄中
/opt/pluto/zookeeper-3.4.14/bin/zkServer.sh start
```
```bash
/opt/pluto/zookeeper-3.4.14/bin/zkServer.sh status # 查看服務狀態
```
#### *kafka*安裝
先在第一臺服務器上配置,再分發給其他服務器。
```bash
tar -zxvf kafka_2.11-2.3.1.tgz -C /opt/pluto/
```
```bash
mkdir -p /opt/pluto/kafka_2.11-2.3.1/kafka-logs # 創建kafka-logs目錄
```
修改配置文件 */opt/pluto/kafka_2.11-2.3.1/config/server.properties*
①、修改 *log.dirs*

*/tmp/kafka-logs* ==> */opt/pluto/kafka_2.11-2.3.1/kafka-logs*
②、修改 *zookeeper.connect*

*localhost:2181* ==> *192.168.8.222:2181,192.168.8.223:2181,192.168.8.224:2181*
③、修改 *listeners* ④、修改 *broker.id* 這兩步等安裝包分發完再配置。
分發安裝包
```bash
scp -r /opt/pluto/kafka_2.11-2.3.1/ root@192.168.8.223:/opt/pluto/
scp -r /opt/pluto/kafka_2.11-2.3.1/ root@192.168.8.224:/opt/pluto/
```
③、修改 *listeners*

將 *#listeners=PLAINTEXT://:9092* 修改為:
第1臺服務器:*listeners=PLAINTEXT://192.168.8.222:9092*
第2臺服務器:*listeners=PLAINTEXT://192.168.8.223:9092*
第3臺服務器:*listeners=PLAINTEXT://192.168.8.224:9092*
④、修改 *broker.id*

將 *broker.id=0* 修改為:
第1臺服務器:*broker.id=0*
第2臺服務器:*broker.id=1*
第3臺服務器:*broker.id=2*
至此,所有的*kafka*配置均已經完成。
啟動 *kafka* 服務,分別在服務器上執行啟動命令:
> USAGE: /opt/pluto/kafka_2.11-2.3.1/bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-server-start.sh -daemon /opt/pluto/kafka_2.11-2.3.1/config/server.properties
```
可使用 `jps` 查看*kafka*進程信息
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-topics.sh --zookeeper 192.168.8.222:2181 --create --topic gosuncn --partitions 3 --replication-factor 2 # 創建主題 gosuncn
```
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-topics.sh --zookeeper 192.168.8.222:2181 --list # All主題
```
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-topics.sh --zookeeper 192.168.8.222:2181 --describe --topic gosuncn # 主題具體描述
```
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-console-consumer.sh --bootstrap-server 192.168.8.222:9092 --topic gosuncn # 消費者端
```
```bash
/opt/pluto/kafka_2.11-2.3.1/bin/kafka-console-producer.sh --broker-list 192.168.8.222:9092 --topic gosuncn # 生產者端
```