Kafka配套的Zookeeper启动脚本
作者:系统管理员
摘要
Kafka配套的Zookeeper启动脚本
你提供的是 Kafka 配套的 Zookeeper 启动脚本(zookeeper-server-start.sh),这个脚本是 Kafka 内置 Zookeeper 的核心启动入口,我先帮你拆解脚本的核心逻辑、关键配置,再结合你之前的场景给出正确使用这个脚本启动 Zookeeper 的完整步骤,以及常见问题排查。
一、脚本核心逻辑解读(新手友好版)
这个脚本的作用是标准化启动 Kafka 内置的 Zookeeper 服务,核心逻辑可分为5部分:
| 逻辑模块 | 作用 | 关键说明 |
|---|---|---|
| 参数校验 | if [ $# -lt 1 ]; then ... |
必须传入配置文件(如 zookeeper.properties),否则报错退出;支持 -daemon 后台启动参数 |
| 基础路径 | base_dir=$(dirname $0) |
获取脚本所在目录(即 Kafka 的 bin 目录),用于拼接配置文件路径 |
| 日志配置 | KAFKA_LOG4J_OPTS |
指定 Zookeeper 的日志配置文件(默认在 ../config/log4j.properties),控制日志输出格式/路径 |
| 内存配置 | KAFKA_HEAP_OPTS |
设置 Zookeeper 的 JVM 堆内存(默认 -Xmx512M -Xms512M,即最大/初始内存512M,测试环境足够) |
| 启动执行 | exec $base_dir/kafka-run-class.sh ... |
调用 Kafka 的通用类运行脚本,启动 Zookeeper 核心类 QuorumPeerMain(Zookeeper 主类) |
二、使用该脚本启动 Zookeeper 的正确步骤(适配你的场景)
结合你之前的 Kafka 配置(zookeeper.connect=localhost:2181),按以下步骤启动 Zookeeper:
步骤1:进入 Kafka 的 bin 目录(脚本所在目录)
go
# 替换为你的 Kafka 实际安装路径,示例:
cd /usr/local/kafka/bin
步骤2:启动 Zookeeper(后台运行,推荐)
go
# 格式:./zookeeper-server-start.sh -daemon 配置文件路径
./zookeeper-server-start.sh -daemon ../config/zookeeper.properties
-
•
-daemon:后台启动(避免终端关闭后 Zookeeper 进程终止);
-
•
../config/zookeeper.properties:Zookeeper 配置文件路径(相对 bin 目录的上级 config 目录)。
步骤3:验证 Zookeeper 是否启动成功
go
# 1. 检查 Zookeeper 进程
ps aux | grep zookeeper | grep -v grep
# 正常结果示例:
# root 20200 0.5 1.2 210000 98768 ? Sl 21:00 0:02 /usr/bin/java -Xmx512M -Xms512M ... org.apache.zookeeper.server.quorum.QuorumPeerMain
# 2. 检查 2181 端口监听(Zookeeper 默认端口)
ss -tulnp | grep 2181
# 正常结果:
# tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 20200/java
# 3. 连接 Zookeeper 客户端验证(最准确)
./zookeeper-shell.sh localhost:2181
# 成功进入客户端后,输入 ls / 查看根节点,正常输出:
# [admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
# 输入 quit 退出客户端
三、常见问题与解决(针对该脚本)
问题1:启动时报 找不到 zookeeper.properties
-
•原因:配置文件路径写错(比如绝对路径/相对路径错误);
-
•解决:确认配置文件在
Kafka安装目录/config/zookeeper.properties,启动命令用../config/zookeeper.properties(相对 bin 目录)或绝对路径(如/usr/local/kafka/config/zookeeper.properties)。
问题2:启动后无进程/端口未监听
-
•原因1:JVM 内存不足(默认512M,若服务器内存小,可调低);
解决:修改脚本中的
KAFKA_HEAP_OPTS,比如改为-Xmx256M -Xms256M,或在启动前临时设置:goexport KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" ./zookeeper-server-start.sh -daemon ../config/zookeeper.properties -
•原因2:配置文件错误(如
zoo.cfg格式问题);解决:查看 Zookeeper 日志(默认在
Kafka安装目录/logs/zookeeper.out):gotail -n 50 ../logs/zookeeper.out常见错误:
Address already in use(2181端口被占用)→ 用lsof -i :2181找到占用进程并终止。
问题3:后台启动后想停止 Zookeeper
go
# 执行停止脚本(在bin目录)
./zookeeper-server-stop.sh
四、关键补充(适配你的 Kafka 启动流程)
启动完 Zookeeper 后,必须等待5-10秒让 Zookeeper 完成初始化,再启动 Kafka:
go
# 启动 Kafka(后台运行)
./kafka-server-start.sh -daemon ../config/server.properties
# 验证 Kafka 启动(参考之前的步骤)
ps aux | grep kafka | grep -v grep
ss -tulnp | grep 9092
总结
-
该脚本是 Kafka 内置 Zookeeper 的标准启动入口,核心是指定配置文件+可选
-daemon后台启动; -
启动顺序:先启动 Zookeeper → 验证 2181 端口 → 再启动 Kafka;
-
验证 Zookeeper 最可靠的方式是用
zookeeper-shell.sh连接客户端,能执行ls /则代表启动成功; -
若启动失败,优先查看
zookeeper.out日志定位问题(端口占用/内存不足/配置错误是高频原因)。
按这个流程操作,就能解决你之前 Kafka 因依赖 Zookeeper 未启动导致的连接失败问题。
原文链接: https://1024bat.cn/article/30
来源: 淘书1024bat