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.location、ssl.keystore.password、ssl.truststore.location、ssl.truststore.password 等。
- 按需选择认证机制(如 SASL/PLAIN、SCRAM 等),并在 listener 上启用对应安全协议。
- 启用 SASL 认证(明文或 SSL 之上):
- listeners 使用 SASL_PLAINTEXT:// 或 SASL_SSL://,设置 sasl.enabled.mechanisms、sasl.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 增加
- 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.bytes、socket.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 9092 或 telnet kafka.example.com 9092
- 外部客户端用 –bootstrap-server 指向 advertised.listeners 地址列表进行生产/消费测试。
五 常见坑与排查清单
- 只配了 listeners 而漏配 advertised.listeners,导致客户端拿到不可达地址(常见于 NAT/云环境)。
- 多网卡/多监听器未正确设置 listener.security.protocol.map 与 inter.broker.listener.name,导致内网/外网或 broker 间通信异常。
- 未放行防火墙或安全组端口,或端口与 advertised.listeners 不一致。
- 请求/消息体过大未同步调整 message.max.bytes / replica.fetch.max.bytes / socket.request.max.bytes,出现超时或异常。
- 系统资源限制过低(文件描述符、内核网络参数),引发 Too many open files、高延迟或丢包。