CentOS 7 已于 2024 年 6 月 30 日停止维护,若必须在该环境部署 Kafka 3.3.1 集群,需重点关注 Java 11 以上版本依赖、Yum 源失效及防火墙端口放行。生产环境建议优先考虑升级操作系统,以下为存量环境部署方案。
先说结论:CentOS 7 搭配 Kafka 3.3.1 属于旧系统维护方案,适合无法立即升级系统的存量场景,配置重点在于 Java 环境兼容性、节点 ID 区分及网络端口互通。
- 适合:存量服务器维护、测试环境或无法升级操作系统的受限场景。
- 先准备:确认安装 OpenJDK 11 或 17,Kafka 3.x 不再支持 Java 8;规划好各节点 broker.id。
- 安全:默认明文传输不安全,生产环境建议配置 SASL/SSL。
- 验收:使用 telnet 或 nc 命令验证节点间 9092 端口及 ZooKeeper 2181 端口连通性。
1. 基础环境与源修复
1.1 修复 CentOS 7 Yum 源
由于 CentOS 7 停止维护,默认源可能无法访问,需切换至 vault 源。
sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo
yum clean all
yum makecache1.2 安装 Java 11
Kafka 3.3.1 强制要求 Java 11 及以上,不再支持 Java 8。
yum install -y java-11-openjdk-devel
java -version确保输出包含 "11" 或 "17"。
2. 下载与解压
从 Apache 官网下载二进制包,解压到指定目录。
wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz
tar -xzf kafka_2.13-3.3.1.tgz -C /opt/kafka
cd /opt/kafka/kafka_2.13-3.3.13. 集群配置修改
3.1 修改 server.properties
进入 config 目录,修改 server.properties。多节点集群必须区分 broker.id。
vim config/server.properties关键配置项如下(注意各节点差异):
# 节点唯一标识,集群中必须唯一 (0, 1, 2...)
broker.id=0
# 监听地址,0.0.0.0 表示监听所有网卡
listeners=PLAINTEXT://0.0.0.0:9092
# 广告监听地址,客户端连接使用的 IP,必须可被外部访问
advertised.listeners=PLAINTEXT://<本机外网 IP>:9092
# ZooKeeper 连接地址,建议配置集群地址
zookeeper.connect=<ZK 节点 1>:2181,<ZK 节点 2>:2181,<ZK 节点 3>:21813.2 安全配置建议
默认 PLAINTEXT 模式数据未加密且无认证。生产环境建议启用 SASL/SSL。
# 示例:启用 SASL_PLAINTEXT (需额外配置 JAAS)
listener.security.protocol.map=SASL_PLAINTEXT:SASL_PLAINTEXT,PLAINTEXT:PLAINTEXT
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN4. 防火墙配置
放行 Kafka 及 ZooKeeper 端口。注意命令语法,参数前不要加反引号。
# 放行 Kafka 端口
firewall-cmd `--zone`=public `--add-port`=9092/tcp `--permanent`
# 放行 ZooKeeper 端口
firewall-cmd `--zone`=public `--add-port`=2181/tcp `--permanent`
# 重载防火墙配置
firewall-cmd `--reload`
# 验证端口是否放行
firewall-cmd `--list-ports`5. 启动服务
先启动 ZooKeeper,再启动 Kafka。建议使用后台启动。
# 启动 ZooKeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 启动 Kafka
bin/kafka-server-start.sh -daemon config/server.properties6. 验证是否生效
6.1 进程检查
使用 jps 命令查看 Java 进程,应看到 QuorumPeerMain (ZK) 和 Kafka。
jps -l6.2 主题创建测试
尝试创建主题并列出,无报错即表示集群内部通信正常。
bin/kafka-topics.sh `--create` `--topic` test-topic `--bootstrap-server` <IP>:9092 `--partitions` 1 `--replication-factor` 1
bin/kafka-topics.sh `--list` `--bootstrap-server` <IP>:90926.3 端口连通性
在客户端机器使用 telnet 测试端口。
telnet <Kafka 节点 IP> 90927. 常见坑与排查
1. broker.id 冲突
集群中每个节点的 broker.id 必须唯一,否则会导致节点无法启动或集群元数据混乱。
2. advertised.listeners 配置错误
若只配 listeners 未配 advertised.listeners,外网客户端可能获取到内网 IP 导致连接失败。确保该 IP 是客户端可路由的地址。
3. CentOS 7 源失效
若 yum install 失败,请检查是否已执行 vault 源切换步骤。
4. 时间同步问题
集群节点间时间偏差过大会导致 ZooKeeper 会话过期,建议配置 NTP 同步。
5. 安全风险
开放 0.0.0.0 且无认证存在安全风险,建议配合防火墙限制源 IP 或启用 SASL 认证。
参考来源
- Apache Kafka Documentation, https://kafka.apache.org/documentation/
- CentOS Project, CentOS Wiki