Linux Kafka开机自启动脚本怎么配置?生产环境该怎么设置?

文章导读
生产环境建议直接使用 systemd 管理 Kafka 服务,而不是依赖简单的 rc.local 或后台挂起脚本。
📋 目录
  1. 前置准备:确认路径与环境
  2. 分步配置 systemd 服务
  3. 怎么验证是否生效
  4. 常见坑与排查
  5. 参考来源
A A

生产环境建议直接使用 systemd 管理 Kafka 服务,而不是依赖简单的 rc.local 或后台挂起脚本。

先说结论:systemd 是主流 Linux 发行版的标准服务管理方式,能更好地处理依赖、重启策略和日志收集。

  • 适合 CentOS 7+/Ubuntu 16.04+ 等支持 systemd 的发行版
  • 先准备独立运行用户和必要的目录权限
  • 验收时检查依赖组件状态和端口监听情况
  • 注意:根据 Kafka 版本确认是否依赖 Zookeeper(KRaft 模式无需 Zookeeper)

前置准备:确认路径与环境

在编写脚本前,务必确认 Kafka 的实际安装路径和 Java 环境,避免直接复制示例导致路径错误。

Linux Kafka开机自启动脚本怎么配置?生产环境该怎么设置?
# 查找 Kafka 安装路径
pwd # 假设当前在 kafka 根目录,例如 /opt/kafka

# 确认 Java 路径
readlink -f $(which java) # 例如 /usr/lib/jvm/java-1.8.0-openjdk/bin/java
# 推导 JAVA_HOME,例如 /usr/lib/jvm/java-1.8.0-openjdk

分步配置 systemd 服务

1. 创建专用用户
不要使用 root 运行 Kafka。创建一个专用用户以减少安全风险。

sudo useradd -r -s /sbin/nologin kafka

2. 规划目录与权限
确保 Kafka 安装目录和数据日志目录归属该用户。

# 请将 /opt/kafka 替换为实际安装路径
sudo chown -R kafka:kafka /opt/kafka
sudo chown -R kafka:kafka /var/log/kafka

3. 编写 systemd Unit 文件
在/etc/systemd/system/kafka.service 中写入配置。注意修改路径和 JAVA_HOME

Linux Kafka开机自启动脚本怎么配置?生产环境该怎么设置?
[Unit]
Description=Kafka Service
# 【重要】若使用 KRaft 模式(Kafka 3.3+ 且未配置 Zookeeper),请注释掉下面两行
Requires=zookeeper.service
After=zookeeper.service

[Service]
User=kafka
# 【重要】显式指定 JAVA_HOME,避免脚本找不到 Java
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
# 【重要】请将 /opt/kafka 替换为实际安装路径
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

4. 启用服务
重载守护进程配置并设置开机自启。

sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka

怎么验证是否生效

1. 检查服务状态
使用以下命令确认服务处于 active (running) 状态。

Linux Kafka开机自启动脚本怎么配置?生产环境该怎么设置?
systemctl status kafka

2. 确认端口监听
检查 Kafka 默认端口 9092 是否正在监听。

ss -tlnp | grep 9092

3. 查看日志输出
通过 journalctl 查看启动日志,确认没有报错。

journalctl -u kafka -n 50

常见坑与排查

  • 权限问题:如果目录权限不对,Kafka 无法写入日志或数据,服务会启动失败。检查 ls -ld 归属。
  • 依赖顺序:Kafka 强依赖 Zookeeper(除非使用 KRaft 模式),Unit 文件中必须配置 After 和 Requires,否则可能因 Zookeeper 未就绪而启动失败。
  • 文件句柄限制:生产环境并发高,需在 Unit 文件中设置 LimitNOFILE,否则可能报 Too many open files。
  • 环境变量缺失:若未配置 JAVA_HOME,启动脚本可能无法找到 java 命令。建议在 Unit 文件中显式指定 Environment。
  • KRaft 模式差异:Kafka 3.3+ 支持 KRaft 模式无需 Zookeeper。若使用此模式,Unit 文件中无需配置 Zookeeper 依赖,且启动参数可能不同。

参考来源

  • Apache Kafka Documentation, "Running Kafka as a Service", kafka.apache.org
  • systemd Documentation, "systemd.service", freedesktop.org