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

安装步骤(以二进制包为例)#

  1. 上传并解压安装包
cd /opt
tar -xzf kafka_2.13-3.6.0.tgz
ln -s /opt/kafka_2.13-3.6.0 /opt/kafka
  1. 创建运行目录并授权
mkdir -p /data/kafka/{data,logs}
chown -R kafka:kafka /opt/kafka /data/kafka
  1. 配置环境变量(可选)
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
  1. 复制并编辑配置文件
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.idlistenersadvertised.listenerslog.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

练习与实践#

  1. 目录规划实践:创建 /data/kafka/data1/data/kafka/data2,配置多路径 log.dirs,重启Kafka并确认目录生成分区日志。
  2. 权限验证:将 /data/kafka 权限改为 root,观察启动失败日志,再修复权限并启动成功。
  3. 配置一致性检查:编写脚本对比集群三台 server.properties 的差异项,仅允许 broker.idadvertised.listeners 不同。
# 练习脚本示例:对比配置一致性
diff -u /etc/kafka-server.properties <(ssh kafka-2 "cat /etc/kafka-server.properties") | grep -Ev "broker.id|advertised.listeners"