Kafka 理解与应用之Kafka集群搭建过程(含ZK集群搭建)

413 阅读3分钟

Q:为什么选择了Kafka?
A:关于这个问题相信网上已经有很多关于Kafka与其他MQ对比的文章:性能、高可用、数据一致性等等。在此我选中Kafka作为消息队列,主要是看中了它对后续K8s等有良好的生态支持。

搭建 ZooKeeper

Kafka 是基于 Zookeeper 来保证其高可用(分区选举)和数据的一致性(在重新选举后),所以在搭建 Kafka 之前,必须先将 Zookeeper 搭建起来

选择 Zookeeper 版本

Zookeeper 官方下载页面:zookeeper.apache.org/releases.ht…

我这边选择的是最新的版本:3.8.0

## 拉取tar包:
wget --no-check-certificate https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
## 解压tar包:
tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz
## 改个文件夹名字
mv apache-zookeeper-3.8.0-bin/ apache-zookeeper-3.8.0
## 挪到某个文件夹
mv apache-zookeeper-3.8.0 /usr/local/soft/

修改 Zookeeper 配置文件

## 进入 zookeeper 目录
cd /usr/local/soft/apache-zookeeper-3.8.0
## 复制副本zoo.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg

## 下面是 zoo.cfg 我修改后的内容
# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial 
initLimit=10

# The number of ticks that can pass between 
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/soft/apache-zookeeper-3.8.0/data

# 日志保存目录
dataLogDir=/usr/local/soft/apache-zookeeper-3.8.0/logs

# the port at which the clients will connect
clientPort=2181

## 集群信息
server.1=192.168.1.23:2188:2888
server.2=192.168.1.25:2188:2888
server.3=192.168.1.26:2188:2888

# 创建myid文件
vim data/myid

# 添加如下内容(myid里面的数字对应上面配置集群时server.x中的x对等)
1

# wq保存退出

推送 Zookeeper 到其他集群机器

 推送到25
scp -r apache-zookeeper-3.8.0 root@192.168.1.25:/usr/local/soft/

## 手动修改25服务器 myid文件内容为2

# 推送到26
scp -r apache-zookeeper-3.8.0 root@192.168.1.26:/usr/local/soft/

## 手动修改26服务器 myid文件内容为3

编写 Zookeeper 集群启动脚本(可选)

# 安装 sshpass
yum install sshpass

# 进入 23服务器 zookeeper bin 目录
cd /usr/local/soft/apache-zookeeper-3.8.0/bin

# 创建zookeeper启动脚本
vim zk.sh

# 添加如下内容
#!/bin/bash
case $1 in
"start"){
        for i in 192.168.1.23 192.168.1.25 192.168.1.26
        do 
                 echo -------------------------------- $i zookeeper 启动 ---------------------------
                sshpass -p root ssh $i "/usr/local/soft/apache-zookeeper-3.8.0/bin/zkServer.sh start"
        done
}
;;
"stop"){
        for i in 192.168.1.23 192.168.1.25 192.168.1.26
        do
                echo -------------------------------- $i zookeeper 停止 ---------------------------
                sshpass -p root ssh $i "/usr/local/soft/apache-zookeeper-3.8.0/bin/zkServer.sh stop"
        done
}
;;
"status"){
        for i in 192.168.1.23 192.168.1.25 192.168.1.26
        do
                echo -------------------------------- $i zookeeper 状态 ---------------------------
                sshpass -p root ssh $i "/usr/local/soft/apache-zookeeper-3.8.0/bin/zkServer.sh status"
        done
}
;;
esac

# 保存退出后,修改zk.sh脚本执行权限
chmod +x ./zk.sh


 #  启动集群命令 ./zk.sh start
# 停止集群命令 ./zk.sh stop
# 查看集群状态命令 ./zk.sh status

Zookeeper 搭建参考博客:
blog.csdn.net/u011109589/…


搭建 Kafka

选择 Kafka 版本

打开Apache Kafka 下载页: kafka.apache.org/downloads

我这里选择下载了当下最新版本:3.2.0

# 下载压缩包
wget --no-check-certificate https://dlcdn.apache.org/kafka/3.2.0/kafka_2.13-3.2.0.tgz

# 解压压缩包
tar -zxvf kafka_2.13-3.2.0.tgz

# 移动到指定目录
mv kafka_2.13-3.2.0 /usr/local/soft/

修改 Kafka 配置文件

## 进入目录
cd kafka_2.13-3.2.0/

## 创建日志文件夹
mkdir logs

## 进入配置文件夹
cd config

## 备份原有配置文件
cp server.properties server.properties.bak

## 编辑配置文件
vim server.properties

## 修改如下配置项
# 集群内全局唯一标识,每个节点上需要设置不同的值
broker.id=1

# 每个节点上设置为自己的IP地址
listeners=PLAINTEXT://192.168.1.23:9092

# 日志保存路径
log.dirs=/usr/local/soft/kafka_2.13-3.2.0/logs

# 配置的是zookeeper集群地址
zookeeper.connect=192.168.1.23:2181,192.168.1.25:2181,192.168.1.26:2181

## 退出编辑并保存
:wq

推送 Kafka 到其他集群机器

 推送到25
scp -r kafka_2.13-3.2.0/ root@192.168.1.25:/usr/local/soft/

## 手动修改 config/server.properties 配置文件
broker.id=2
listeners=PLAINTEXT://192.168.1.25:9092

# 推送到26
scp -r kafka_2.13-3.2.0/ root@192.168.1.26:/usr/local/soft/

## 手动修改 config/server.properties 配置文件
broker.id=3
listeners=PLAINTEXT://192.168.1.26:9092

编写 Kafka 集群启动脚本

# 由于kafka是scale编写的,所以需要导入java环境
vim /etc/profile
# 添加如下内容(注意:填写自己的java安装目录)
export JAVA_HOME=/usr/java/jdk1.8.0_241
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

# 进入 23服务器 zookeeper bin 目录
cd /usr/local/soft/kafka_2.13-3.2.0/bin

# 创建kafka 集群启动脚本
vim kfk-cluster.sh

# 添加如下内容
#!/bin/bash
case $1 in
"start"){
        for i in 192.168.1.23 192.168.1.25 192.168.1.26
        do 
                 echo -------------------------------- $i kafka 启动 ---------------------------
                sshpass -p root ssh $i "source /etc/profile;/usr/local/soft/kafka_2.13-3.2.0/bin/kafka-server-start.sh -daemon /usr/local/soft/kafka_2.13-3.2.0/config/server.properties"
        done
}
;;
"stop"){
        for i in 192.168.1.23 192.168.1.25 192.168.1.26
        do
                echo -------------------------------- $i kafka 停止 ---------------------------
                sshpass -p root ssh $i "/usr/local/soft/kafka_2.13-3.2.0/bin/kafka-server-stop.sh"
        done
}
;;
esac

# 保存退出后,修改zk.sh脚本执行权限
chmod +x ./kfk-cluster.sh


 #  启动集群命令 ./kfk-cluster.sh start
# 停止集群命令 ./kfk-cluster.sh stop

测试 Kafka 服务

cd /usr/local/soft/kafka_2.13-3.2.0/bin
# 查看 topic 列表
sh kafka-topics.sh --list --bootstrap-server 192.168.1.23:9092

# 创建一个名叫test 的 topic
sh kafka-topics.sh --create --bootstrap-server 192.168.1.23:9092,192.168.1.25:9092,192.168.1.26:9092 --replication-factor 3 --partitions 1 --topic test

# 再次执行查看,刚创建的test topic是否存在
sh kafka-topics.sh --list --bootstrap-server 192.168.1.23:9092

# 在23服务器上启动一个生产者,监听test 这个topic
sh kafka-console-producer.sh --broker-list 192.168.1.23:9092 --topic test

# 在25和26服务器上启动一个监听test topic 的消费者
sh bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.25:9092 --topic test --from-beginning
sh bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.25:9092 --topic test --from-beginning

# 在23服务器上输入:hello kafka! 就会发现25和26两台服务器的消费者都能收到!

Kafka 搭建参考博客:
juejin.cn/post/711425…


第一次在掘金写文章,若是文章能给你带来帮助或启发,就达到文章的目的。

你不可能事事都精通,但你可以选择不断的、有效的去学习。我是thundzeng,一个Java程序员。