温馨提示×

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):
      • sudo ufw allow 9092/tcp
  • 云环境需同步在安全组放行对应端口与来源网段。
  • 如需临时关闭防火墙进行排查,可在测试环境执行(不建议生产):
    • 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.listenersIP/DNS:9092 进行生产/消费验证
    • 若使用云服务器,确认安全组与防火墙均放行,且 advertised 地址对客户端可达。

0