10.2.3 Kafka安装与目录规划
本节介绍Kafka安装流程、版本选择与目录规划,确保集群部署具备统一规范,便于后续运维与升级,并通过示例、排错与练习固化操作。
版本与安装方式选择#
- 版本建议:生产环境优先选择稳定版(如3.x LTS),与业务依赖的客户端版本保持兼容。
- 安装方式:
- 官方二进制包:常见且易于控制版本。
- 系统包管理:方便但版本受仓库限制,不建议生产长期使用。
- 容器化部署:适合K8s场景,需结合镜像与持久化规划。
目录与组件关系草图#
安装前准备#
- JDK:Kafka依赖JDK 8/11,建议JDK 11。
- 用户与权限:创建专用用户kafka,避免使用root。
- 时间同步:NTP保持集群时间一致。
- 主机名解析:配置DNS或/etc/hosts,确保Broker间通信稳定。
准备命令示例与解释#
# 1) 安装并切换到 JDK 11(以 Rocky/CentOS 为例)
yum -y install java-11-openjdk java-11-openjdk-devel
java -version # 预期输出包含 "11."
# 2) 创建运行用户
useradd -r -s /sbin/nologin kafka
# 3) 校时(如已部署 chrony 可跳过)
timedatectl set-ntp true
timedatectl status | grep "NTP" # 预期为 yes
# 4) 主机名解析(示例)
cat >> /etc/hosts <<'EOF'
10.0.0.11 kafka-1
10.0.0.12 kafka-2
10.0.0.13 kafka-3
EOF
安装步骤(以二进制包为例)#
- 上传并解压安装包
cd /opt
tar -xzf kafka_2.13-3.6.0.tgz
ln -s /opt/kafka_2.13-3.6.0 /opt/kafka
- 创建运行目录并授权
mkdir -p /data/kafka/{data,logs}
chown -R kafka:kafka /opt/kafka /data/kafka
- 配置环境变量(可选)
cat > /etc/profile.d/kafka.sh <<'EOF'
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
EOF
source /etc/profile.d/kafka.sh
- 复制并编辑配置文件
cp /opt/kafka/config/server.properties /etc/kafka-server.properties
# 关键参数(示例)
cat >> /etc/kafka-server.properties <<'EOF'
broker.id=1
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://kafka-1:9092
log.dirs=/data/kafka/data
num.network.threads=3
num.io.threads=8
log.retention.hours=168
EOF
目录规划建议#
| 目录 | 说明 |
|---|---|
| /opt/kafka | 安装主目录(软链接指向版本目录) |
| /data/kafka/data | Kafka数据目录(log.dirs) |
| /data/kafka/logs | Broker运行日志 |
| /var/log/kafka | 系统日志或统一日志路径 |
| /etc/kafka | 配置文件集中管理(可选) |
规划原则与示例#
- 数据与程序分离:避免升级影响数据
示例:升级只替换/opt/kafka_2.13-3.6.0,/data/kafka/data不动。 - 独立磁盘:数据目录建议使用独立磁盘或卷,提高IO性能
bash lsblk -f # 确认独立数据盘挂载到 /data - 多盘分布:
log.dirs可配置多个路径
properties log.dirs=/data/kafka/data1,/data/kafka/data2
配置文件组织建议#
- 核心配置:
server.properties - 环境变量:
/etc/profile.d/kafka.sh或 systemd Environment - 统一模板:集群内保持一致,差异项仅为
broker.id、listeners、advertised.listeners、log.dirs
systemd服务文件示例(完整)#
# /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka
After=network.target
[Service]
Type=simple
User=kafka
Group=kafka
Environment=KAFKA_HEAP_OPTS=-Xms1g -Xmx1g
ExecStart=/opt/kafka/bin/kafka-server-start.sh /etc/kafka-server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
启动与验证示例#
systemctl daemon-reload
systemctl enable --now kafka
systemctl status kafka --no-pager
# 端口检查
ss -lntp | grep 9092
# 查看日志(预期包含 "started (kafka.server.KafkaServer)")
tail -n 50 /data/kafka/logs/server.log
安装完成检查#
- 目录权限无误,数据目录可写
kafka-server-start.sh可正常读取配置- 端口规划符合整体网络与安全策略
快速健康检查命令#
# 查看Broker是否启动并监听
ss -lntp | grep 9092
# 简单创建主题(需后续配置ZK/KRaft,本处用于连通性预检)
/opt/kafka/bin/kafka-topics.sh --bootstrap-server kafka-1:9092 --list
常见故障与排错示例#
1) 端口未监听(9092)#
现象:ss -lntp | grep 9092 无输出
排查:
journalctl -u kafka -n 50 --no-pager
tail -n 50 /data/kafka/logs/server.log
常见原因:配置文件路径错误、权限不足、JDK不可用
修复:
# 修正配置文件路径或权限
chown -R kafka:kafka /etc/kafka-server.properties /data/kafka
2) advertised.listeners 配置错误导致连接失败#
现象:客户端报 Connection to node -1 could not be established
排查:
grep advertised.listeners /etc/kafka-server.properties
修复:
advertised.listeners=PLAINTEXT://kafka-1:9092
3) 日志目录无权限#
现象:server.log 中出现 Permission denied
修复:
chown -R kafka:kafka /data/kafka
systemctl restart kafka
练习与实践#
- 目录规划实践:创建
/data/kafka/data1、/data/kafka/data2,配置多路径log.dirs,重启Kafka并确认目录生成分区日志。 - 权限验证:将
/data/kafka权限改为 root,观察启动失败日志,再修复权限并启动成功。 - 配置一致性检查:编写脚本对比集群三台
server.properties的差异项,仅允许broker.id、advertised.listeners不同。
# 练习脚本示例:对比配置一致性
diff -u /etc/kafka-server.properties <(ssh kafka-2 "cat /etc/kafka-server.properties") | grep -Ev "broker.id|advertised.listeners"