Kafka单节点部署手册

-
- 字
2026-10-12 11:28

Kafka 单节点部署手册※

1. 部署信息※

项目内容
主机 IP172.32.2.13
操作系统Linux aarch64
JDK 版本jdk-17.0.12_linux-aarch64_bin.tar.gz
ZooKeeper 版本apache-zookeeper-3.8.5-bin.tar.gz
Kafka 版本kafka_2.12-3.7.2.tgz
安装目录/opt/software
ZooKeeper 数据目录/data/zookeeper
Kafka 日志目录/data/kafka-logs
全局 JavaJDK 1.8(已配置,保持不变)
部署原则不修改全局环境变量,仅在启动脚本内为 ZooKeeper 和 Kafka 指定 JDK 17

2. 准备工作※

2.1 创建目录※

mkdir -p /opt/software
mkdir -p /data/zookeeper
mkdir -p /data/kafka-logs

2.2 上传并解压安装包※

将以下三个安装包上传至 /opt/software:

  • jdk-17.0.12_linux-aarch64_bin.tar.gz
  • apache-zookeeper-3.8.5-bin.tar.gz
  • kafka_2.12-3.7.2.tgz

执行解压:

cd /opt/software

tar -xzf jdk-17.0.12_linux-aarch64_bin.tar.gz
tar -xzf apache-zookeeper-3.8.5-bin.tar.gz
tar -xzf kafka_2.12-3.7.2.tgz

2.3 重命名目录※

mv jdk-17.0.12 jdk17
mv apache-zookeeper-3.8.5-bin zookeeper
mv kafka_2.12-3.7.2 kafka

最终目录结构:

/opt/software/
├── jdk17/
├── zookeeper/
└── kafka/

3. 部署 ZooKeeper 3.8.5※

3.1 创建配置文件※

cd /opt/software/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改为以下内容:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181

3.2 为 ZooKeeper 单独指定 JDK 17※

编辑 /opt/software/zookeeper/bin/zkServer.sh,在文件开头 #!/usr/bin/env bash 下方新增:

export JAVA_HOME=/opt/software/jdk17
export PATH=$JAVA_HOME/bin:$PATH

这样启动 ZooKeeper 时会使用 JDK 17,不会影响全局 JDK 1.8。

3.3 启动并验证 ZooKeeper※

cd /opt/software/zookeeper
bin/zkServer.sh start
bin/zkServer.sh status

若输出 Mode: standalone,表示单节点启动成功。


4. 部署 Kafka 3.7.2※

4.1 修改 Kafka 配置文件※

cd /opt/software/kafka/config
vi server.properties

修改以下关键配置:

broker.id=0
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://172.32.2.13:9092
log.dirs=/data/kafka-logs
zookeeper.connect=172.32.2.13:2181

num.partitions=1
default.replication.factor=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

4.2 为 Kafka 指定 JDK 17 并修复 UseG1GC 报错※

Kafka 所有命令行工具最终都会调用 kafka-run-class.sh,因此在该脚本中统一指定 JDK 17。

编辑 /opt/software/kafka/bin/kafka-run-class.sh,在文件开头 #!/usr/bin/env bash 下方新增:

export JAVA_HOME=/opt/software/jdk17
export PATH=$JAVA_HOME/bin:$PATH

接着在同一文件中找到 KAFKA_JVM_PERFORMANCE_OPTS 所在行,删除其中的 -XX:+UseG1GC。

修改前示例:

KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 ..."

修改后示例:

KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:MaxGCPauseMillis=20 ..."

原因:JDK 17 下 -XX:+UseG1GC 可能被标记为实验性选项,导致 Error: VM option 'UseG1GC' is experimental。JDK 17 默认使用 G1,删除该参数即可。

如果希望保留该参数,也可改为:

KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC ..."

4.3 启动 Kafka※

确保 ZooKeeper 已正常运行后,执行:

cd /opt/software/kafka
bin/kafka-server-start.sh -daemon config/server.properties

4.4 验证进程※

jps

应看到两个进程:

  • QuorumPeerMain — ZooKeeper
  • Kafka — Kafka Broker

5. 功能验证※

5.1 创建测试 Topic※

/opt/software/kafka/bin/kafka-topics.sh \
  --create \
  --topic test-topic \
  --bootstrap-server 172.32.2.13:9092 \
  --partitions 1 \
  --replication-factor 1

5.2 查看 Topic 列表※

/opt/software/kafka/bin/kafka-topics.sh \
  --list \
  --bootstrap-server 172.32.2.13:9092

5.3 生产与消费测试※

终端 A(生产者):

/opt/software/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server 172.32.2.13:9092 \
  --topic test-topic

输入若干消息后回车。

终端 B(消费者):

/opt/software/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server 172.32.2.13:9092 \
  --topic test-topic \
  --from-beginning

能收到刚才输入的消息即表示部署成功。


6. 日常运维※

6.1 启动顺序※

# 1. 启动 ZooKeeper
/opt/software/zookeeper/bin/zkServer.sh start

# 2. 启动 Kafka
/opt/software/kafka/bin/kafka-server-start.sh -daemon /opt/software/kafka/config/server.properties

6.2 停止顺序※

# 1. 停止 Kafka
/opt/software/kafka/bin/kafka-server-stop.sh

# 2. 停止 ZooKeeper
/opt/software/zookeeper/bin/zkServer.sh stop

6.3 状态查看※

# ZooKeeper 状态
/opt/software/zookeeper/bin/zkServer.sh status

# Kafka 进程
jps | grep Kafka

7. 常见问题※

7.1 报错 VM option 'UseG1GC' is experimental※

现象:

Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.
Error: Could not create the Java Virtual Machine.

解决:编辑 /opt/software/kafka/bin/kafka-run-class.sh,删除 KAFKA_JVM_PERFORMANCE_OPTS 中的 -XX:+UseG1GC,或添加 -XX:+UnlockExperimentalVMOptions。修改后所有 Kafka 命令均生效。

7.2 外部客户端无法连接 Kafka※

检查 /opt/software/kafka/config/server.properties:

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://172.32.2.13:9092

并确认防火墙已放行 9092 和 2181 端口:

firewall-cmd --add-port=9092/tcp --permanent
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --reload

7.3 Kafka 启动内存不足※

可设置环境变量 KAFKA_HEAP_OPTS 调整堆内存,例如:

export KAFKA_HEAP_OPTS="-Xms512M -Xmx512M"

再启动 Kafka。若需永久生效,可写入启动脚本或 systemd 服务文件。


8. 附录:JDK 版本隔离说明※

本手册未修改 /etc/profile、~/.bashrc 等全局环境变量,全局仍使用 JDK 1.8。JDK 17 仅通过以下两个脚本局部生效:

组件脚本作用
ZooKeeper/opt/software/zookeeper/bin/zkServer.sh启动 ZooKeeper 时使用 JDK 17
Kafka/opt/software/kafka/bin/kafka-run-class.sh所有 Kafka 命令(含 Broker、Topic 工具)使用 JDK 17

因此,其他依赖 JDK 1.8 的应用不受影响。


部署完成后,Kafka 单节点即可在 172.32.2.13:9092 提供服务,ZooKeeper 监听 172.32.2.13:2181。