在 CentOS 上让客户端或本机连接到 Kafka 的完整设置
一 基础环境准备
- 安装 Java 8+(Kafka 依赖 JVM):sudo yum install java-1.8.0-openjdk-devel -y,执行 java -version 验证。
- 下载并解压 Kafka(示例版本 3.5.2):
wget https://downloads.apache.org/kafka/3.5.2/kafka_2.12-3.5.2.tgz
tar -xzf kafka_2.12-3.5.2.tgz && sudo mv kafka_2.12-3.5.2 /opt/kafka
- 可选:配置环境变量(/etc/profile)
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
以上为后续所有模式(单机、Zookeeper、KRaft)的通用准备步骤。
二 选择部署模式并配置 server.properties
- 传统模式(依赖 Zookeeper)
- 关键配置(/opt/kafka/config/server.properties):
broker.id=0(集群内唯一)
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://服务器实际IP:9092(客户端用此地址连接)
log.dirs=/opt/kafka/kafka_logs
zookeeper.connect=localhost:2181(Zookeeper 地址)
- 启动顺序:先启动 Zookeeper(/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties),再启动 Kafka(/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties)。
- KRaft 模式(Kafka 2.8+,无 Zookeeper)
- 关键配置:
process.roles=broker,controller
node.id=0(集群内唯一)
controller.quorum.voters=0@服务器IP:9093
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=PLAINTEXT://服务器实际IP:9092
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/opt/kafka/kafka_logs
- 启动命令:/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties(无需单独启动 Zookeeper)。
以上配置要点与启动方式适用于在 CentOS 上快速打通内外网访问与基础连通性。
三 网络与系统访问控制
- 防火墙放通端口(默认 9092):
sudo firewall-cmd --zone=public --add-port=9092/tcp --permanent && sudo firewall-cmd --reload
- 云服务器安全组:在控制台放行 TCP 9092(入方向)。
- 监听与对外地址:listeners 设为 0.0.0.0:9092 以监听所有网卡;advertised.listeners 必须填写客户端可达的 服务器IP或域名。
- SELinux(如启用):可按需调整网络相关布尔值(例如 sudo setsebool -P httpd_can_network_connect 1),或临时 setenforce 0 验证是否为 SELinux 导致。
- 本机回环测试与生产建议:本机可用 localhost:9092 验证;对外服务务必使用实际 服务器IP 并放通防火墙/安全组。
以上确保外部客户端(同网段或跨公网)能稳定连接到 Kafka 9092 端口。
四 本机连通性验证与常见排错
- 创建测试 Topic:
/opt/kafka/bin/kafka-topics.sh --create --topic test --bootstrap-server 服务器IP:9092 --partitions 1 --replication-factor 1
- 发送/接收消息:
生产者:/opt/kafka/bin/kafka-console-producer.sh --topic test --bootstrap-server 服务器IP:9092
消费者:/opt/kafka/bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server 服务器IP:9092
- 常见排错要点:
- advertised.listeners 填写错误(客户端连不通或拿到不可达地址)。
- 防火墙/安全组未放行 9092。
- 监听地址仅绑定 127.0.0.1(应改为 0.0.0.0)。
- 目录权限不足(log.dirs 不可写)。
- KRaft 模式未正确配置 controller.quorum.voters 与 node.id。
以上验证流程与排错清单可快速定位大多数连接问题。
五 可选优化与进阶
- 生产参数建议:
num.partitions=8(按吞吐调大)
default.replication.factor=3(多副本容灾)
min.insync.replicas=2(写一致性要求)
log.retention.hours=168(日志保留时长)
- 后台运行与自启:
- 使用 nohup:nohup /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties >/dev/null 2>&1 &
- 使用 systemd:创建 /etc/systemd/system/kafka.service(ExecStart 指向 server.properties),然后 systemctl daemon-reload && systemctl enable --now kafka。
- 安全加固(可选):启用 SASL/SSL 认证与加密,限制未授权访问。
以上设置可提升稳定性、可靠性与安全性,适合从测试环境平滑过渡到生产环境。