Kafka 单节点部署手册※
1. 部署信息※
| 项目 | 内容 |
|---|---|
| 主机 IP | 172.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 |
| 全局 Java | JDK 1.8(已配置,保持不变) |
| 部署原则 | 不修改全局环境变量,仅在启动脚本内为 ZooKeeper 和 Kafka 指定 JDK 17 |
2. 准备工作※
2.1 创建目录※
mkdir -p /opt/software
mkdir -p /data/zookeeper
mkdir -p /data/kafka-logs2.2 上传并解压安装包※
将以下三个安装包上传至 /opt/software:
jdk-17.0.12_linux-aarch64_bin.tar.gzapache-zookeeper-3.8.5-bin.tar.gzkafka_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.tgz2.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=21813.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=14.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.properties4.4 验证进程※
jps应看到两个进程:
QuorumPeerMain— ZooKeeperKafka— 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 15.2 查看 Topic 列表※
/opt/software/kafka/bin/kafka-topics.sh \
--list \
--bootstrap-server 172.32.2.13:90925.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.properties6.2 停止顺序※
# 1. 停止 Kafka
/opt/software/kafka/bin/kafka-server-stop.sh
# 2. 停止 ZooKeeper
/opt/software/zookeeper/bin/zkServer.sh stop6.3 状态查看※
# ZooKeeper 状态
/opt/software/zookeeper/bin/zkServer.sh status
# Kafka 进程
jps | grep Kafka7. 常见问题※
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 --reload7.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。