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程序员。