*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
```
![zoo.cfg](https://img.kancloud.cn/f6/0b/f60b9c5ddaed5fab699080e08bec0fc6_317x179.jpg)
```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*
![kafka.cfg1](https://img.kancloud.cn/f4/f7/f4f758d926bbb48bb8f1dcf3fc790456_721x98.jpg)
*/tmp/kafka-logs* ==> */opt/pluto/kafka_2.11-2.3.1/kafka-logs*
②、修改 *zookeeper.connect*
![kafka.cfg2](https://img.kancloud.cn/d3/ce/d3ceefa0528826d5bd863eeab1f85995_753x178.jpg)
*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*
![kafka.cfg3](https://img.kancloud.cn/2c/da/2cdabd9ed0b040e973bcbbe628012258_752x188.jpg)
将 *#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*
![kafka.cfg4](https://img.kancloud.cn/ae/e9/aee9497fa1c1bcf7844e190686e86efd_576x87.jpg)
将 *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 # 生产者端
```