温馨提示×

Kafka在Linux下如何配置网络

小樊
39
2025-12-13 03:51:30
栏目: 智能运维

Linux下Kafka网络配置实操指南

一 核心配置项与含义

  • 监听器与对外地址
    • listeners:Broker 实际监听的协议、主机与端口,格式为 security_protocol://host:port,如 PLAINTEXT://0.0.0.0:9092(监听所有接口)或 PLAINTEXT://192.168.1.10:9092(仅内网)。
    • advertised.listeners:对外暴露给客户端/其他 Broker 的地址,客户端会用它进行连接,必须能从客户端网络解析与到达。
    • inter.broker.listener.name:指定用于 Broker 之间通信的监听器名称(多监听器隔离内外网时有用)。
    • listener.security.protocol.map:为监听器名称映射安全协议(如 CONTROLLER:PLAINTEXT)。
  • KRaft 模式专用(Kafka 3.0+)
    • process.roles=broker,controllernode.id 唯一标识节点。
    • controller.listener.names 指定控制器监听器名称。
    • controller.quorum.bootstrap.servers 指定控制器集群引导地址(如 CONTROLLER://192.168.1.10:9093)。
  • 网络与线程
    • num.network.threads(网络 I/O 线程)、num.io.threads(磁盘/请求处理线程)。
    • socket.send.buffer.bytessocket.receive.buffer.bytes(TCP 缓冲)。
    • socket.request.max.bytes(单请求上限)。
  • 连接与元数据
    • zookeeper.connect(ZooKeeper 模式):如 zk1:2181,zk2:2181,zk3:2181
    • 客户端最小配置:bootstrap.servers=broker1:9092,broker2:9092
      以上参数共同决定 Kafka 的“监听谁、对外给谁、内外网如何隔离、Broker 之间如何互通”。

二 两种常见部署的网络配置示例

  • ZooKeeper 模式(传统)
    • server.properties 关键项:
      • listeners=PLAINTEXT://0.0.0.0:9092
      • advertised.listeners=PLAINTEXT://<公网或客户端可达IP>:9092
      • zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
    • 说明:将 advertised.listeners 设为客户端可访问的地址(域名或公网 IP),否则可能出现能连上但元数据返回不可达地址的情况。
  • KRaft 模式(Kafka 3.0+)
    • server.properties 关键项:
      • process.roles=broker,controller
      • node.id=1
      • listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      • inter.broker.listener.name=PLAINTEXT
      • controller.listener.names=CONTROLLER
      • controller.quorum.bootstrap.servers=CONTROLLER://192.168.1.10:9093
      • advertised.listeners=PLAINTEXT://<客户端可达IP>:9092
    • 说明:通过 CONTROLLER 监听器隔离控制器流量,避免与业务流量争用;Broker 间通信使用 inter.broker.listener.name 指定的监听器。
      以上示例覆盖了“内外网可达”“监听器隔离”“KRaft 必备项”等关键点。

三 系统与防火墙放行

  • firewalld(RHEL/CentOS/Fedora)
    • 放行端口:sudo firewall-cmd --add-port=9092/tcp --permanent && sudo firewall-cmd --reload
    • 如启用 KRaft,还需放行控制器端口(如 9093)。
  • ufw(Debian/Ubuntu)
    • 放行端口:sudo ufw allow 9092/tcp;KRaft 场景加 sudo ufw allow 9093/tcp
  • iptables(通用)
    • 放行端口:sudo iptables -A INPUT -p tcp --dport 9092 -j ACCEPT;保存规则(如 iptables-save > /etc/iptables/rules.v4)。
  • 云环境
    • 同时配置云厂商安全组,放通 TCP 9092(及 9093 如启用 KRaft)对客户端网段或 0.0.0.0/0(按最小权限原则)。
      以上确保外部与集群内部对 9092/9093 的访问不被防火墙或安全组拦截。

四 验证与连通性测试

  • 本机监听检查
    • 查看端口监听:ss -lntp | grep :9092netstat -an | grep 9092,应看到 0.0.0.0:9092 或指定 IP 的监听。
  • 客户端连通
    • 使用控制台生产者/消费者验证:
      • 生产:bin/kafka-console-producer.sh --bootstrap-server <advertised.listeners地址>:9092 --topic test
      • 消费:bin/kafka-console-consumer.sh --bootstrap-server <advertised.listeners地址>:9092 --topic test --from-beginning
    • 若使用 KRaft,创建主题时可通过 –bootstrap-server :9092 连接。
  • 常见问题定位
    • 能 telnet 通但业务连不通:多为 advertised.listeners 配置为不可达地址(如仅 localhost 或内网地址)。
    • 集群内通信异常:检查 inter.broker.listener.namecontroller.listener.namescontroller.quorum.bootstrap.servers 是否一致且可达。
      以上步骤能快速确认“监听是否正确”“客户端是否可达”“内外网是否隔离合理”。

五 性能与安全加固建议

  • 监听器与安全
    • 生产环境建议禁用明文,启用 SSL/TLSSASL_SSL/SASL_PLAINTEXT,并通过 listener.security.protocol.map 明确协议映射。
  • 网络与内核
    • 适度增大 socket.send.buffer.bytes / socket.receive.buffer.bytes,提升高吞吐场景下的网络吞吐。
    • 启用压缩(如 snappy、lz4、zstd)降低网络字节量。
    • 提升文件描述符与内核网络参数(如 ulimit -n、TCP keepalive 等),避免连接数/长连接问题。
  • 监控与容量
    • 监控 BytesIn/Out、RequestRate、NetworkProcessorAvgIdlePercent 等指标,结合业务峰值调优线程与缓冲。
      以上做法在保障安全性的同时,提高吞吐与稳定性。

0