Kafka在Linux上的网络配置
小樊
33
2025-11-15 11:57:34
Kafka在Linux上的网络配置
一 核心配置项与含义
- 建议同时配置以下三项,避免内外网解析不一致或客户端连不通:
- listeners:Broker 实际监听的协议、地址与端口,例如:PLAINTEXT://0.0.0.0:9092(监听所有网卡)或 PLAINTEXT://192.168.1.10:9092(仅内网)。
- advertised.listeners:对外暴露给客户端的地址,客户端将据此连接,例如:PLAINTEXT://your.domain.com:9092 或公网/内网可达的 IP:9092。
- zookeeper.connect:ZooKeeper 连接串,例如:zk1:2181,zk2:2181,zk3:2181。
- 常见示例(单 broker,内网+外网分离):
- listeners=PLAINTEXT://0.0.0.0:9092
- advertised.listeners=PLAINTEXT://203.0.113.10:9092
- 如需内外网并存,可为不同协议或端口分别配置 listener(如同时配置内网 PLAINTEXT 与外网 SSL)。
二 主机与防火墙放行
- 放行端口(示例为 9092,如启用 ZooKeeper 还需 2181):
- firewalld(RHEL/CentOS/Fedora):
- sudo firewall-cmd --add-port=9092/tcp --permanent
- sudo firewall-cmd --reload
- ufw(Ubuntu/Debian):
- 云环境需同步在安全组放行对应端口与来源网段。
- 如需临时关闭防火墙进行排查,可在测试环境执行(不建议生产):
- service iptables stop 或 chkconfig iptables off(旧系统)。
三 Ubuntu网络与网卡要点
- 查看网卡:ifconfig 或 ip addr;确认用于通信的 IP 与 网卡名(如 eth0/enp0s3)。
- 静态 IP 示例(传统 ifupdown):
- auto enp0s3
- iface enp0s3 inet static
- address 192.168.0.10
- netmask 255.255.255.0
- gateway 192.168.0.1
- dns-nameservers 223.5.5.5
- 应用:sudo systemctl restart networking
- Ubuntu 20.04+ 使用 Netplan(/etc/netplan/*.yaml):
- 示例:
- network:
- version: 2
- renderer: networkd
- ethernets:
- eth0:
- dhcp4: no
- addresses: [192.168.0.10/24]
- gateway4: 192.168.0.1
- nameservers: { addresses: [223.5.5.5] }
- 应用:sudo netplan apply
- 将 advertised.listeners 设置为客户端可达的 IP/DNS,否则会出现能连上但无法生产的“silent failure”。
四 性能与安全优化
- 系统网络与资源:
- 提高文件描述符:ulimit -n 65535(并在 systemd 服务中设置 LimitNOFILE)。
- 调优 TCP/内核:
- net.core.somaxconn、net.ipv4.tcp_max_syn_backlog、net.ipv4.ip_local_port_range
- 启用快速打开:net.ipv4.tcp_fastopen=3
- 可按需开启/调优:tcp_no_delay、tcp_keepalive_time
- 硬件:使用高性能多队列网卡(NIC)、SSD 磁盘。
- Kafka 参数:
- 增大网络缓冲:socket.send.buffer.bytes、socket.receive.buffer.bytes
- 线程与处理能力:num.network.threads、num.io.threads
- 消息层面:启用压缩(如 snappy/lz4/zstd)、合理设置 message.max.bytes
- 安全:
- 启用 SSL/TLS 加密通信(配置密钥与证书路径)
- 启用 SASL/SCRAM 等认证机制。
五 验证与连通性测试
- 本机连通性:
- 创建主题:bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092
- 生产消息:bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
- 消费消息:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
- 远程连通性:
- 使用外部客户端连接 advertised.listeners 的 IP/DNS:9092 进行生产/消费验证
- 若使用云服务器,确认安全组与防火墙均放行,且 advertised 地址对客户端可达。