温馨提示×

kafka网络配置在centos有哪些要点

小樊
46
2025-11-29 21:08:38
栏目: 智能运维

CentOS 上 Kafka 网络配置要点

一 核心监听与对外地址

  • 明确区分并同时配置以下三项,避免客户端“连不通”或“连错”:
    • listeners:Broker 实际监听的接口与端口,如:PLAINTEXT://0.0.0.0:9092(监听所有地址)或指定内网地址。
    • advertised.listeners:对外“告知”客户端的地址,跨机房、NAT、负载均衡场景尤其关键,如:PLAINTEXT://kafka.example.com:9092
    • listener.security.protocol.map:为每个监听器指定安全协议,如:listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT
  • 多监听器与内外网隔离示例(将内网与公网/客户端分离):
    • listeners=INTERNAL://192.168.1.10:9092,EXTERNAL://公网IP:9093
    • advertised.listeners=INTERNAL://192.168.1.10:9092,EXTERNAL://kafka.example.com:9093
    • listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
    • inter.broker.listener.name=INTERNAL
  • 客户端连接入口使用 bootstrap.servers 指向所有 broker 的 advertised.listeners 地址列表。

二 传输与协议安全

  • 启用 SSL/TLS 加密通信(生产推荐):
    • listeners 使用 SSL://SASL_SSL://,配置 ssl.keystore.locationssl.keystore.passwordssl.truststore.locationssl.truststore.password 等。
    • 按需选择认证机制(如 SASL/PLAIN、SCRAM 等),并在 listener 上启用对应安全协议。
  • 启用 SASL 认证(明文或 SSL 之上):
    • listeners 使用 SASL_PLAINTEXT://SASL_SSL://,设置 sasl.enabled.mechanismssasl.mechanism.inter.broker.protocol,并提供 JAAS 配置文件(通过 KAFKA_OPTS=“-Djava.security.auth.login.config=…” 指定)。
  • 压缩降低带宽占用:在生产者端配置 compression.type=gzip|snappy|lz4|zstd,权衡 CPU 与网络。

三 系统与网络优化

  • 文件描述符与进程数:
    • 临时:ulimit -n 65535;ulimit -u 65535
    • 永久:在 /etc/security/limits.conf 增加
        • soft nofile 65535
        • hard nofile 65535
        • soft nproc 65535
        • hard nproc 65535
  • TCP 与内核网络参数(示例):
    • net.core.rmem_default = 4194304;net.core.wmem_default = 4194304
    • net.ipv4.tcp_rmem = 4096 65536 4194304;net.ipv4.tcp_wmem = 4096 65536 4194304
    • net.ipv4.tcp_window_scaling = 1;net.ipv4.tcp_max_syn_backlog = 5120
    • net.core.netdev_max_backlog = 100000
    • 内存与刷脏:vm.swappiness=1;vm.dirty_background_ratio=5;vm.dirty_ratio=70
  • Kafka 网络与 I/O 线程:
    • num.network.threads(处理网络事件)、num.io.threads(处理磁盘 I/O)
    • socket.send.buffer.bytessocket.receive.buffer.bytes(提升吞吐与延迟表现)
  • 消息与请求大小(按带宽与内存规划):
    • message.max.bytes(单条消息上限)
    • replica.fetch.max.bytes(副本拉取上限,需与 broker 端一致)
    • socket.request.max.bytes(单请求上限)

四 防火墙与连通性验证

  • 防火墙放行端口(以 firewalld 为例):
    • 开放 9092/9093:firewall-cmd --add-port=9092/tcp --permanent && firewall-cmd --reload
    • 如使用 KRaft,还需放行 9093/9094(Controller/内部通信端口,视实际配置而定)。
  • 连通性自检:
    • 本机监听:ss -lntp | grep 9092
    • 端口可达:nc -vz kafka.example.com 9092telnet kafka.example.com 9092
    • 外部客户端用 –bootstrap-server 指向 advertised.listeners 地址列表进行生产/消费测试。

五 常见坑与排查清单

  • 只配了 listeners 而漏配 advertised.listeners,导致客户端拿到不可达地址(常见于 NAT/云环境)。
  • 多网卡/多监听器未正确设置 listener.security.protocol.mapinter.broker.listener.name,导致内网/外网或 broker 间通信异常。
  • 未放行防火墙或安全组端口,或端口与 advertised.listeners 不一致。
  • 请求/消息体过大未同步调整 message.max.bytes / replica.fetch.max.bytes / socket.request.max.bytes,出现超时或异常。
  • 系统资源限制过低(文件描述符、内核网络参数),引发 Too many open files、高延迟或丢包。

0