学习消息队列——>老师让部署kafka集群——>不想下载那么多虚拟机配环境
这里使用Centos7环境,首先搭好基本环境(jdk)等
使用
tar -zxvf file.tar.gz /usr/local
file改成自己的文件
解压三次
---改配置文件
修改 server.properties
这个文件在 kafka的config文件夹下,三个都要改
但我们只需要改
broker.id (用于区分不同的kafka,务必不同)
listeners (指的是kafka占用的端口,如果在同一虚拟机下搭建,也要不同)
log.dirs=/usr/local/kafka_2.12-2.4.1/data (存放日志文件,每个kafka都不同)
这几个的值,以下是我的值
1 kafka
broker.id=0
listeners=PLAINTEXT://:9092
log.dirs=/usr/local/kafka_2.12-2.4.1/data
---------------------------------------------------------------------------------
2 kafka
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/usr/local/kafka-slave1/kafka_2.12-2.4.1/data
--------------------------------------------------------------------------------------
3 kafka
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/usr/local/kafka-slave2/kafka_2.12-2.4.1/data
------------------------------------------------------------------------------------------
改完了,我们可以开始启动了
-----启动zookeep
kakfa启动时依赖zookeep环境,在低版本中kafka安装包有zookeep的存在
所以直接在这个目录结构下
./bin/zookeeper-server-start.sh config/zookeeper.properties
./abcdef.sh 是运行abcdef为名的.sh文件 , 空一格接上路径是使用配置文件 config/zookeeper.properties
中指定的配置。
三个kafka的zookeep都要启动。嫌弃麻烦也可以编写shell脚本(把三个文件路径给chatgpt,让他给你写)
#!/bin/bash
# 启动/usr/local/kafka_2.12-2.4.1目录下的ZooKeeper服务
/usr/local/kafka_2.12-2.4.1/bin/zookeeper-server-start.sh /usr/local/kafka_2.12-2.4.1/config/zookeeper.properties &
# 启动/usr/local/kafka-slave1/kafka_2.12-2.4.1目录下的ZooKeeper服务
/usr/local/kafka-slave1/kafka_2.12-2.4.1/bin/zookeeper-server-start.sh /usr/local/kafka-slave1/kafka_2.12-2.4.1/config/zookeeper.properties &
# 启动/usr/local/kafka-slave2/kafka_2.12-2.4.1目录下的ZooKeeper服务
/usr/local/kafka-slave2/kafka_2.12-2.4.1/bin/zookeeper-server-start.sh /usr/local/kafka-slave2/kafka_2.12-2.4.1/config/zookeeper.properties &
新建空白记事本后改后缀为.sh 即可,运行前 即可
使用 chmod +x /usr/local/sh/about-kafka/kafka_three_start.sh
为其添加执行权限
之后
1 .
直接复制文件路径
在终端中直接运行:
/usr/local/sh/about-kafka/自己编写的shell.sh
或
2.
在终端中切换到脚本文件所在的目录:
cd /usr/local/sh/about-kafka/
点杠+执行脚本文件:
./自己编写的shell.sh
----------------------------------------------
使用
ps aux | grep zookeeper
命令看看启动成没成功。这是检查 Zookeeper 进程的命令
-------启动kafka
命令(参考)
./bin/kafka-server-start.sh config/server.properties
./接server.properties路径就行,三个都要启动
也可以编写shell脚本(把三个文件路径给chatgpt,让他给你写)
#!/bin/bash
# Kafka 服务器路径
kafka_paths=("/usr/local/kafka_2.12-2.4.1" "/usr/local/kafka-slave1/kafka_2.12-2.4.1" "/usr/local/kafka-slave2/kafka_2.12-2.4.1")
# Kafka 配置文件路径
config_paths=("${kafka_paths[0]}/config/server.properties" "${kafka_paths[1]}/config/server.properties" "${kafka_paths[2]}/config/server.properties")
# 启动 Kafka 服务器函数
start_kafka() {
kafka_path=$1
config_path=$2
echo "Starting Kafka server: ${kafka_path}"
${kafka_path}/bin/kafka-server-start.sh -daemon ${config_path}
# 检查 Kafka 服务器是否成功启动
if [ $? -eq 0 ]; then
echo "Kafka server started successfully."
else
echo "Failed to start Kafka server at: ${kafka_path}"
exit 1 # 退出脚本,返回错误状态码
fi
}
# 启动所有 Kafka 实例
for ((i=0; i<${#kafka_paths[@]}; i++)); do
start_kafka ${kafka_paths[$i]} ${config_paths[$i]}
done
# 添加日志记录
log_file="kafka_startup.log"
echo "Kafka servers started at $(date)" >> $log_file
echo "All Kafka servers started successfully. Script completed."
(这里不知道为什么一定要加 -daemon(11行),如果不加就会自动关闭 以下是gpt解释
-daemon
参数用于在后台启动 Kafka 服务器进程,而不会阻塞当前的终端会话。如果不使用 -daemon
参数,Kafka 服务器将会在前台运行,这样会占用当前的终端会话——chatgpt)
启动
可以使用
ss -tuln | grep 9092
ss -tuln | grep 9093
ss -tuln | grep 9094
命令来看有没有启动成功,
这样是启动成功了
---------关闭的操作
这里是shell脚本
#!/bin/bash
# 停止主Kafka实例
/usr/local/kafka_2.12-2.4.1/bin/kafka-server-stop.sh
# 停止第一个从属Kafka实例
/usr/local/kafka-slave1/kafka_2.12-2.4.1/bin/kafka-server-stop.sh
# 停止第二个从属Kafka实例
/usr/local/kafka-slave2/kafka_2.12-2.4.1/bin/kafka-server-stop.sh
# 停止Zookeeper服务
/usr/local/kafka_2.12-2.4.1/bin/zookeeper-server-stop.sh
或者跟着这个路径自己找到 bin目录下的
/usr/local/kafka_2.12-2.4.1/bin/kafka-server-stop.sh(示例)
kafka-server-stop.sh文件执行。先停三个kafka,最后停zookeep。
------------排错相关,如果你发现错误请按照以下方式排查
看看
如果 ss -tuln | grep 9092/3/4 都没显示,说明kafka一个没启动,排查zookeep相关进程
如果 有一个或几个显示,没显示全,大概率某端口被占用,使用
lsof -i :2181 #2181改成你的端口
没下载lsof花20秒使用yum install lsof下一个
如果是非重要进程,使用 kill 9034(改你的id)如果重要,重启电脑或进配置文件改端口
举个例子
这里zookeep启动失败,导致所有卡f卡启动成功但是没占指定端口,故排查到zookeep
显示0条
是某个java的进程,大概是jdk的,不敢动,重启后解决问题
问题二
这个shell脚本由于太简单时常会引起问题,例如不能正常报错,如果是学习项目中间报错的情况下,如果某一天突然启动不了,大概率是使用时正确的启动关闭,请删除在第一步(改配置文件) 中我们设定的
log.dirs=/usr/local/kafka_2.12-2.4.1/data
我们把所有data文件里的东西删掉。