1、准备环境
(1)准备三台虚拟机
192.168.225.111
192.168.225.112
192.168.225.113
(2)jdk安装参考这里
(3)分别修改三台虚拟机的hostname
vim /etc/hostname
192.168.225.111的修改为kafka-broker1
192.168.225.112的修改为kafka-broker2
192.168.225.113的修改为kafka-broker3
(4)分别修改三台虚拟机的hosts
vim /etc/hosts,在三台虚拟机的hosts都添加如下内容,这样做是为三台虚拟机之间可以通过主机名解析IP地址
192.168.225.111 kafka-broker1
192.168.225.112 kafka-broker2
192.168.225.113 kafka-broker3
(5)三台虚拟机之间相互能够通过ssh免密访问(主要是为了后面执行一键启动kafka集群脚本不要在输入密码)
分别在三台虚拟机上执行ssh-keygen,一路按回车键就可以
然后
在kafka-broker1虚拟机上依次执行ssh-copy-id kafka-broker1,ssh-copy-id kafka-broker2,ssh-copy-id kafka-broker3,然后输入yes,输入kafka-broker1、kafka-broker2、kafka-broker3密码
在kafka-broker2虚拟机上依次执行ssh-copy-id kafka-broker1,ssh-copy-id kafka-broker3,然后输入yes,输入kafka-broker1、kafka-broker3密码
在kafka-broker3虚拟机上依次执行ssh-copy-id kafka-broker1,ssh-copy-id kafka-broker2,然后输入yes,输入kafka-broker1、kafka-broker2密码
2、安装zookeeper
(1)下载zookeeper
下载地址
(2)分别在三台虚拟机上传apache-zookeeper-3.8.4-bin.tar.gz到/opt目录下并解压
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
mv apache-zookeeper-3.8.4 zookeeper
(3)分别在三台虚拟机上修改zookeeper配置文件
cd /opt/zookeeper/conf
cp zoo_example.cfg zoo.cfg
vim zoo.cfg
修改如下内容:
dataDir=/var/lib/zookeeper
添加如下内容
server.1=kafka-broker1:2888:3888
server.2=kafka-broker2:2888:3888
server.3=kafka-broker3:2888:3888
(4)分别在三台虚拟机创建如下目录
mkdir /var/lib/zookeeper
cd /var/lib/zookeeper
touch myid
在192.168.225.111虚拟机上执行echo '1' > myid
在192.168.225.112虚拟机上执行echo '2' > myid
在192.168.225.113虚拟机上执行echo '3' > myid
(5)分别在三台虚拟机启动zookeeper
分别在三台虚拟机启动zookeeper
cd /opt/zookeeper
bin/zkServer.sh start
(6)脚本一键启动三台虚拟机上的zookeeper
在kafka-broker1虚拟机的/root/bin目录下创建zk.sh,内容如下:
case $1 in
"start") {
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -----------------$i zookeeper 启动-----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh start"
done
};;
"stop") {
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -----------------$i zookeeper 停止-----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh stop"
done
};;
"status") {
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -----------------$i zookeeper 状态-----------------
ssh $i "/opt/zookeeper/bin/zkServer.sh status"
done
};;
esac
3、安装kafka
(1)下载kafka
下载地址
(2)分别在三台虚拟机上传到/opt目录下并解压
tar -zxvf kafka_2.12-3.7.0.tgz
mv kafka_2.12-3.7.0 kafka
(4)分别在三台虚拟机上创建kafka-logs目录
mkdir -p /var/lib/kafka-logs
(4)分别在三台虚拟机上修改kafka的配置文件
修改/opt/kafka/config/server.properties内容如下:
在192.168.225.111虚拟机上修改
broker.id=1
advertised.listeners=PLAINTEXT://kafka-broker1:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=kafka-broker1:2181,kafka-broker2:2181,kafka-broker3:2181/kafka
在192.168.225.112虚拟机上修改
broker.id=2
advertised.listeners=PLAINTEXT://kafka-broker2:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=kafka-broker1:2181,kafka-broker2:2181,kafka-broker3:2181/kafka
在192.168.225.113虚拟机上修改
broker.id=3
advertised.listeners=PLAINTEXT://kafka-broker3:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=kafka-broker1:2181,kafka-broker2:2181,kafka-broker3:2181/kafka
4、一键脚本启动kafka集群
在kafka-broker1虚拟机的/root/bin目录下创建如下脚本:
xcall.sh脚本
#!/bin/bash
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -------------------$i-----------------------
ssh $i "$*"
done
kafka.sh脚本
#!/bin/bash
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -------------------$i-----------------------
ssh $i "$*"
done
kafka-broker1:~/bin # cat kafka.sh
#!/bin/bash
case $1 in
"start") {
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -----------------$i kafka 启动-----------------
ssh $i "/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties"
done
};;
"stop") {
for i in kafka-broker1 kafka-broker2 kafka-broker3
do
echo -----------------$i kafka 停止-----------------
ssh $i "/opt/kafka/bin/kafka-server-stop.sh"
done
};;
esac
kafka-cluster.sh脚本(一键启停kafka集群脚本)
#!/bin/bash
case $1 in
"start") {
echo -----------------$i 启动kafka集群-----------------
echo -----------------$i zookeeper cluster 启动-----------------
zk.sh start
echo -----------------$i kafka cluster 启动-----------------
kafka.sh start
};;
"stop") {
echo -----------------$i 停止kafka集群-----------------
echo -----------------$i kafka cluster 停止-----------------
kafka.sh stop
kafka_count=$(xcall jps | grep Kafka | wc -l)
while [ $kafka_count -gt 0 ]
do
sleep 1
kafka_count=$(xcall jps | grep Kafka | wc -l)
done
echo -----------------$i zookeeper cluster 停止-----------------
zk.sh stop
};;
esac
分别以上脚本增加执行权限
chmod 777 kafka-cluster.sh kafka.sh xcall zk.sh
执行kafka-cluster.sh脚本启动kafka集群
./kafka-cluster.sh start
执行kafka-cluster.sh脚本停止kafka集群
./kafka-cluster.sh stop