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-n65535;ulimit-u65535

永久:在/etc/security/limits.conf增加

softnofile65535

hardnofile65535

softnproc65535

hardnproc65535

TCP与内核网络参数(示例):

net.core.rmem_default=4194304;net.core.wmem_default=4194304

net.ipv4.tcp_rmem=4096655364194304;net.ipv4.tcp_wmem=4096655364194304

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|grep9092

端口可达:nc-vzkafka.example.com9092或telnetkafka.example.com9092

外部客户端用–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,出现超时或异常。

系统资源限制过低(文件描述符、内核网络参数),引发Toomanyopenfiles、高延迟或丢包。