1. 环境介绍
Kafka在2.8版本之前是必须使用zookeeper(后面统称为ZK)作为数据存储的节点的,需要把Kafka中一些重要的数据存储在ZK中,在2.8版本之后,Kafka提出了去ZK化,将重要的数据存储在自身的节点中了,本篇博客还是以ZK作为重要数据存储节点来搭建,后续的博客中,我会将不用ZK搭建的Kafka教程也更新出来,如果有兴趣的可以关注我一下,后面我将持续的更新。
2.部署前的准备
我们这次搭建的是2台kafka集群以及1台ZK节点,使用2台centos7的虚拟机,ZK的集群部署在后面的博客中我会更新,我们先用1台ZK节点,在配置中的区别不大。
-
centos7中JDK环境的搭建:这里可以参考我的CI/CD专栏中jenkins那篇博客,里面有安装JDK环境的教程
-
Kafka版本3.0.0:Kafka3.0.0下载地址
-
ZK版本3.5.9:Zookeeper3.5.9下载地址
-
2台虚拟机(Centos7系统),命名为centos1和centos2
为了我们后续使用方便,我们将虚拟机设置成NAT模式,并且把IP地址给固定一下,虚拟机还不会使用的,可以从我的博客中的工具专栏里面找到安装的方法。下面我们教一下如何设置主机名和固定IP地址
设置主机名
配置主机名
配置完主机名之后需要重启一下虚拟机
固定IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
各位根据自己虚拟机的真实情况编写,可能网关和可以分配的IP和我这里不一样。可在虚拟机的虚拟网络编辑器中查看
另一台虚拟机的地址,我这里设置成了192.168.181.129
设置完成之后,记得重启一下网络的服务
systemctl restart network.service
3. 搭建kafka集群
将我们下载的压缩包上传到服务器中
3.1 解压压缩包
解压压缩包到 /usr/local 目录下
tar -zxvf /home/kafka/kafka_2.12-3.0.0.tgz -C /usr/local
tar -zxvf /home/zookeeper/apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local
解压后把文件改一下名称
mv apache-zookeeper-3.7.0-bin zookeeper
mv kafka_2.12-3.0.0 kafka
此时,/usr/local 下的目录结构应该是这个样子的,
3.2 搭建Zookeeper
1.在zookeeper目录中新建一个data文件夹
mkdir /usr/local/zookeeper/data
2.接下来配置zookeeper的配置文件,首先我们先将zoo_sample.cfg文件复制一份出来
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
3.接下来,我们编辑 zoo.cfg文件
vi /usr/local/zookeeper/conf/zoo.cfg
修改存放数据的目录为我们刚刚新建的data目录
退出保存 !wq
4.为了让我们在任何的目录下都能使用ZK的命令,这里我们需要配置一下ZK的环境变量
vi /etc/profile
在文件中添加如下的配置
#zookeeper environment
export ZK_HOME=/usr/local/zookeeper
export PATH=$PATH:${ZK_HOME}/bin
退出保存 !wq
使配置文件生效
source /etc/profile
5.接下来,启动一下我们ZK试试
zkServer.sh start
看到如下的信息,基本表示我们的ZK已经启动成功了
6.为了验证一下 ,我们连接一下ZK试试
zkCli.sh
这里看到,我们已经进入了ZK的命令行,表示ZK已经搭建成功了
3.3 搭建Kafka集群
1.配置Kafka的环境变量
vi /etc/profile
添加如下信息
#Kafka environment
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:${KAFKA_HOME}/bin
配置生效
source /etc/profile
2.在Kafka文件夹中新建一个data目录存放数据
mkdir -p /usr/local/kafka/data
3.编辑Kafka的配置文件
vi /usr/local/kafka/config/server.properties
这里关注4个参数
# kafka集群中的唯一ID
broker.id=0
# kafka节点的IP地址
listeners=PLAINTEXT://192.168.181.128:9092
# kafka存储数据的地址
log.dirs=/usr/local/kafka/data
# ZK节点地址
zookeeper.connect=192.168.181.128:2181/kafka
# 如果这里配置的是ZK的集群,后面的地址用逗号分隔,例如192.168.181.128:2181,192.168.181.129:2181/kafka,后面的/kafka目录是指定在ZK中把Kafka中的数据全部存在这个目录下,如果后面我们不用Kakfa了,方便把ZK的数据给清理一下
4.启动Kafka,看看能不能工作
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
这里看到我们的kafka已经启动起来了
5.我们将我们配置好kafka文件发送到centos2这台机器
scp -r /usr/local/kafka/ root@192.168.181.129:/usr/local/kafka/
我这里配置ssh免密登陆,如果没有配置的可以参考的我的linux专栏中的文章,没有配置的需要输入一下另一台机器的密码
6.将另一台机器的配置修改一下
环境变量这些就不说了,和上面的一样,主要修改一下kafka中的server.properties
vi /usr/local/kafka/config/server.properties
主要修改以下几个参数
# 因为刚刚的那台Kakfa我们设置成了0,所以这台我们设置成1
broker.id=1
# 配置成本台机器的地址
listeners=PLAINTEXT://192.168.181.129:9092
7.启动第二台Kafka
kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
这里可能有的人会启动不起来,因为我们刚刚把centos1这台机器的kafka发送到centos2,centos1这台机器中data文件夹已经有数据了,所以启动不起来,只要把centos2kafka里面的 data文件夹给删除重新建一下就好了
8.在centos1机器中ZK节点中查看一下borkers,看看是不是有两台Kafka节点连了上来
zkCli.sh
ls /kafka/brokers/ids
可以看到,我们的kafka数据全部存到了ZK中的kafka目录中,并且brokers里面已经有两台机器注册进来了。
4. 简单的生产者消费者测试
1 我们在128的这台节点上新建一个first主题
kafka-topics.sh --bootstrap-server 192.168.181.128:9092 --create --topic first --partitions 2 --replication-factor 2
2.我们试试在129这台机器上能不能看到这个主题
kafka-topics.sh --bootstrap-server 192.168.181.129:9092 --list
kafka-topics.sh --bootstrap-server 192.168.181.129:9092 --topic first --describe
可以看到,我们集群环境已经搭建成功了,两台机器的数据是互通的
3.我们在128上作为提供者,在129上消费看看能不能成功
生产者
kafka-console-producer.sh --bootstrap-server 192.168.181.128:9092 --topic first
消费者
kafka-console-consumer.sh --bootstrap-server 192.168.181.129:9092 --topic first
可以看到,我们在128往first主题发送信息,在129的broker中依然可以接收到,说明我们的集群环境搭建成功。