Kafka配套的Zookeeper启动脚本

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,或在启动前临时设置:

    go 复制代码
    export KAFKA_HEAP_OPTS="-Xmx256M -Xms256M"
    ./zookeeper-server-start.sh -daemon ../config/zookeeper.properties
  • •原因2:配置文件错误(如 zoo.cfg 格式问题);

    解决:查看 Zookeeper 日志(默认在 Kafka安装目录/logs/zookeeper.out):

    go 复制代码
    tail -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

总结

  1. 该脚本是 Kafka 内置 Zookeeper 的标准启动入口,核心是指定配置文件+可选 -daemon 后台启动;

  2. 启动顺序:先启动 Zookeeper → 验证 2181 端口 → 再启动 Kafka;

  3. 验证 Zookeeper 最可靠的方式是用 zookeeper-shell.sh 连接客户端,能执行 ls / 则代表启动成功;

  4. 若启动失败,优先查看 zookeeper.out 日志定位问题(端口占用/内存不足/配置错误是高频原因)。

按这个流程操作,就能解决你之前 Kafka 因依赖 Zookeeper 未启动导致的连接失败问题。


原文链接: https://1024bat.cn/article/30

来源: 淘书1024bat

相关推荐
難釋懷5 小时前
分布式锁-redission锁的MutiLock原理
分布式
掘根6 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
一体化运维管理平台6 小时前
容器监控难题破解:美信监控易全面支持K8s、Docker
云原生·容器·kubernetes
小北方城市网6 小时前
RabbitMQ 生产级实战:可靠性投递、高并发优化与问题排查
开发语言·分布式·python·缓存·性能优化·rabbitmq·ruby
乾元6 小时前
拒绝服务的进化:AI 调度下的分布式协同攻击策略
人工智能·分布式
江畔何人初7 小时前
service发现
linux·运维·云原生
编程彩机7 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
造夢先森7 小时前
Clawdbot(OpenClaw)安装部署教程
人工智能·微服务·云原生
qiubinwei7 小时前
kubeadm部署K8S集群(踩坑实录)
云原生·容器·kubernetes
听麟7 小时前
HarmonyOS 6.0+ PC端多设备文件拖拽协同开发实战:手眼同行增强与分布式软总线深度应用
分布式·华为·harmonyos