CentOS 7 环境下 Kafka 3.3.1 集群怎么搭建?防火墙该怎么配置?

文章导读
CentOS 7 已于 2024 年 6 月 30 日停止维护,若必须在该环境部署 Kafka 3.3.1 集群,需重点关注 Java 11 以上版本依赖、Yum 源失效及防火墙端口放行。生产环境建议优先考虑升级操作系统,以下为存量环境部署方案。
📋 目录
  1. 1. 基础环境与源修复
  2. 2. 下载与解压
  3. 3. 集群配置修改
  4. 4. 防火墙配置
  5. 5. 启动服务
  6. 6. 验证是否生效
  7. 7. 常见坑与排查
  8. 参考来源
A A

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 makecache

1.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.1

3. 集群配置修改

3.1 修改 server.properties
进入 config 目录,修改 server.properties。多节点集群必须区分 broker.id。

CentOS 7 环境下 Kafka 3.3.1 集群怎么搭建?防火墙该怎么配置?
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>:2181

3.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=PLAIN

4. 防火墙配置

放行 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.properties

6. 验证是否生效

6.1 进程检查
使用 jps 命令查看 Java 进程,应看到 QuorumPeerMain (ZK) 和 Kafka。

jps -l

6.2 主题创建测试
尝试创建主题并列出,无报错即表示集群内部通信正常。

CentOS 7 环境下 Kafka 3.3.1 集群怎么搭建?防火墙该怎么配置?
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>:9092

6.3 端口连通性
在客户端机器使用 telnet 测试端口。

telnet <Kafka 节点 IP> 9092

7. 常见坑与排查

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 认证。

参考来源