10.2.2 环境准备与依赖配置
在部署Kafka集群前需完成基础环境与依赖配置,确保节点一致性、可维护性与可扩展性。本节给出可执行示例、排错与练习。
原理草图:环境依赖与通信关系#
操作系统与基础要求(含示例)#
- 建议统一发行版与版本(CentOS 7/8、Rocky、Ubuntu LTS)。
- 统一主机名与时区,启用时钟同步。
- 规划数据盘与日志盘分离,避免系统盘被占满。
示例:主机名、时区与时间同步#
# 1) 设置主机名
hostnamectl set-hostname kafka-01
# 2) 设置时区
timedatectl set-timezone Asia/Shanghai
# 3) 安装并启用 chrony
yum -y install chrony
systemctl enable --now chronyd
# 4) 校验时间同步
chronyc tracking
排错提示#
chronyc tracking显示Leap status: Not synchronised:检查NTP源可达、放通UDP/123。
Java运行环境(含示例)#
- Kafka 3.x 推荐 JDK 11+,确保所有节点一致。
- 配置
JAVA_HOME并加入PATH。
示例:安装OpenJDK 11并配置环境变量#
# CentOS/Rocky
yum -y install java-11-openjdk java-11-openjdk-devel
# 设置环境变量(/etc/profile.d/java.sh)
cat >/etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile.d/java.sh
java -version
排错提示#
java: command not found:确认/etc/profile.d/java.sh已加载或重新登录。
系统参数与内核调优(含示例)#
- 提高
nofile/nproc,优化TCP参数,关闭THP。 vm.swappiness=1减少换页。
示例:limits与sysctl配置#
# 1) 用户限制
cat >>/etc/security/limits.conf <<'EOF'
kafka soft nofile 65535
kafka hard nofile 65535
kafka soft nproc 65535
kafka hard nproc 65535
EOF
# 2) 内核参数(/etc/sysctl.d/99-kafka.conf)
cat >/etc/sysctl.d/99-kafka.conf <<'EOF'
fs.file-max=1000000
net.core.somaxconn=1024
net.core.netdev_max_backlog=5000
net.ipv4.tcp_tw_reuse=1
vm.swappiness=1
EOF
sysctl --system
示例:关闭透明大页(THP)#
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 持久化(加入 rc.local 或 systemd)
cat >>/etc/rc.d/rc.local <<'EOF'
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local
排错提示#
sysctl --system无效:检查文件语法、是否被容器限制或安全策略阻断。
网络与主机配置(含示例)#
- 配置静态IP与DNS解析,确保节点互通。
- 开放Kafka 9092,ZooKeeper 2181或KRaft 9093。
示例:/etc/hosts 统一解析#
cat >>/etc/hosts <<'EOF'
10.0.0.11 kafka-01
10.0.0.12 kafka-02
10.0.0.13 kafka-03
EOF
# 连通性验证
ping -c 2 kafka-02
示例:端口连通性检查#
# 用 nc 或 telnet 检查端口
nc -zv kafka-02 9092
nc -zv kafka-03 2181
排错提示#
nc: Connection refused:服务未启动或防火墙阻断。No route to host:路由或安全组配置错误。
时间与日志准备(含示例)#
- 统一日志目录与权限,使用专用用户运行Kafka。
- 设置日志轮转,防止磁盘占满。
示例:创建目录与权限#
# 创建用户与目录
useradd -r -m -s /sbin/nologin kafka
mkdir -p /data/kafka/{data,logs}
chown -R kafka:kafka /data/kafka
示例:日志轮转(logrotate)#
cat >/etc/logrotate.d/kafka <<'EOF'
/data/kafka/logs/*.log {
daily
rotate 14
compress
missingok
notifempty
copytruncate
}
EOF
排错提示#
- 日志文件增长过快:检查是否开启DEBUG或重复启动。
依赖组件准备(ZooKeeper/KRaft示例)#
- ZooKeeper模式:准备3/5节点并验证健康。
- KRaft模式:生成
cluster.id并规划元数据目录。
示例:ZooKeeper健康检查#
# 连接并检查模式(leader/follower)
echo ruok | nc zk-01 2181
echo stat | nc zk-01 2181 | head -n 5
示例:KRaft 生成 cluster.id#
# 进入Kafka目录
./bin/kafka-storage.sh random-uuid
# 输出示例:M9aI8qP9QO-9bK8dH9pX2g
排错提示#
ruok返回空:ZK未启动或端口阻断。- KRaft启动失败:
cluster.id不一致或元数据目录权限不足。
安全与权限基础(含示例)#
- 不使用root运行,最小化权限。
- 规划后续SASL/SSL与ACL能力。
示例:sudo最小权限(可选)#
cat >/etc/sudoers.d/kafka <<'EOF'
kafka ALL=NOPASSWD:/bin/systemctl start kafka
kafka ALL=NOPASSWD:/bin/systemctl stop kafka
EOF
命令解释速查#
hostnamectl:修改主机名并写入系统配置。timedatectl:管理时区与时间同步状态。sysctl --system:加载全部内核参数配置。nc -zv:快速检测端口连通性。kafka-storage.sh random-uuid:生成KRaft集群ID。
排错清单(快速定位)#
- 端口不可达:防火墙/安全组/路由。
- JDK版本不一致:
java -version逐台核对。 - 写入目录失败:
ls -ld /data/kafka检查权限。 - 时间不同步:
chronyc tracking检查。
练习题(含动手要求)#
- 在三台主机上完成JDK 11安装与
JAVA_HOME配置,截图java -version输出。 - 将
nofile提升到65535并验证:su - kafka -c "ulimit -n"。 - 使用
nc验证9092端口并记录结果,模拟阻断后说明原因。 - 生成一个KRaft
cluster.id,并写出用于后续格式化存储的命令。 - 为
/data/kafka/logs配置logrotate,模拟生成日志并观察轮转结果。