kafka集群在单个Centos7虚拟机的部署

学习消息队列——>老师让部署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文件里的东西删掉。

  • 34
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值