Kafka配置中的网络设置指南
listeners:定义Kafka Broker监听的地址和端口,格式为<协议>://<主机名/IP>:<端口>(如PLAINTEXT://your.server.ip:9092)。需确保该地址能被客户端或ZooKeeper访问,若为空则监听所有接口,但生产环境建议指定具体IP。
advertised.listeners:客户端连接Broker时使用的地址,需设置为外部可访问的IP/域名(如公网IP或负载均衡地址)。若集群跨机房或需要内外网访问,需配置为对应的可达地址(如EXTERNAL://public.ip:9092)。
zookeeper.connect:Broker连接ZooKeeper集群的地址,格式为<主机名/IP1>:<端口1>,<主机名/IP2>:<端口2>,...(如zk1:2181,zk2:2181,zk3:2181)。需确保ZooKeeper集群正常运行且地址可达。
send.buffer.bytes:生产者/服务器发送数据的Socket缓冲区大小,默认100KB(102400字节)。增大该值可提升批量发送效率,建议设置为1MB(1048576字节)以上,需根据网络带宽调整。
receive.buffer.bytes:消费者/服务器接收数据的Socket缓冲区大小,默认100KB。增大该值可提升数据接收能力,建议设置为1MB以上。
num.network.threads:处理网络IO的线程数,默认3。需根据CPU核心数调整,建议设置为CPU核心数的1~2倍(如8核服务器设置为8),以应对高并发连接。
num.io.threads:处理磁盘IO的线程数,默认8。需根据磁盘数量和性能调整,建议设置为磁盘数的2倍以上(如4块SSD设置为8),提升消息写入/读取效率。
socket.request.max.bytes:单个Socket请求的最大大小,默认100MB(104857600字节)。增大该值可提升批量消息传输效率,但需确保客户端和生产者配置一致,避免消息截断。
num.partitions:Topic的分区数,影响并行处理能力。建议设置为消费者线程数的2~3倍(如消费者有4个线程,分区数设置为8~12),提升吞吐量。
TCP参数调整:编辑/etc/sysctl.conf文件,添加以下参数优化TCP性能:
net.core.rmem_max=16777216(接收缓冲区最大值)net.core.wmem_max=16777216(发送缓冲区最大值)net.ipv4.tcp_rmem=4096 87380 16777216(TCP接收缓冲区动态调整范围)net.ipv4.tcp_wmem=4096 65536 16777216(TCP发送缓冲区动态调整范围)net.ipv4.tcp_low_latency=1(启用低延迟模式)sysctl -p。文件描述符限制:编辑/etc/security/limits.conf文件,添加以下行提升文件描述符上限(Kafka需处理大量连接):
* soft nofile 65536(软限制)
* hard nofile 65536(硬限制)。
内外网分流:若需区分内外网访问,可使用listener.security.protocol.map配置不同监听器的安全协议,例如:
listeners=INTERNAL://192.168.0.213:9092,EXTERNAL://101.89.163.1:19092
advertised.listeners=INTERNAL://192.168.0.213:9092,EXTERNAL://101.89.163.1:19092
inter.broker.listener.name=INTERNAL
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:SSL
上述配置中,内网使用PLAINTEXT协议(无加密),外网使用SSL协议(加密),确保外网通信安全。
确保防火墙允许Kafka端口(默认9092)的通信:
sudo ufw allow 9092/tcp。sudo firewall-cmd --permanent --add-port=9092/tcp,然后sudo firewall-cmd --reload。sudo iptables -A INPUT -p tcp --dport 9092 -j ACCEPT,保存规则:sudo iptables-save > /etc/iptables.rules。