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

相关推荐
IT 行者17 小时前
微服务架构选型指南:中小型软件公司的理性思考
微服务·云原生·架构
超级种码17 小时前
Kafka四部曲之一:Kafka的核心概念
分布式·kafka
Chan1618 小时前
微服务 - Higress网关
java·spring boot·微服务·云原生·面试·架构·intellij-idea
Java 码农18 小时前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
u01040583618 小时前
基于 Kafka Exactly-Once 语义保障微信群发消息不重复不丢失
分布式·kafka·linq
没有bug.的程序员18 小时前
Serverless 架构深度解析:FaaS/BaaS、冷启动困境与场景适配指南
云原生·架构·serverless·架构设计·冷启动·baas·faas
超级种码19 小时前
Kafka四部曲之二:核心架构与设计深度解析
分布式·架构·kafka
optimistic_chen19 小时前
【Redis 系列】持久化特性
linux·数据库·redis·分布式·中间件·持久化
论迹19 小时前
RabbitMQ
分布式·rabbitmq