Netty的写缓冲区容量一直为0,最后居然是网络带宽问题...

前言

之前使用Netty消费Kafka中的数据,做实时数据上传的时候,数据总是积压,带宽总是在32Gbit/s,我在代码中对缓冲区做了一个容量监控,在发送的过程中一直提示容量不足不可写(后来拉扯了一年,证明是对端网络以及带宽问题,最后调整了网络和办卡,带宽达到了64Gbit/s)。后来为了收集问题证据,我还是学到了不少东西,包括今天要说的:缓冲区。

缓冲区

缓冲区,顾名思义就是用来做缓冲的,例如I/O中的BufferedInputStream,以及NIO里的Buffer。在我的应用中,数据传输底层使用的是socket(TCP),数据传输通常是由发送方和接收方组成,每一方都会有sendBuf和recvBuf。

sendBuf发送缓冲区,当应用程序需要发送数据时,数据首先被写入发送缓冲区。网络协议栈会从发送缓冲区中取出数据,进行协议处理(如TCP/IP封装),然后发送到网络上。

recvBuf是接收缓冲区,当数据从网络到达时,网络协议栈会将接收到的数据放入接收缓冲区。应用程序可以从接收缓冲区中读取数据进行处理。

如果应用程序处理数据的速度慢于网络接收速度,数据会暂时存储在接收缓冲区中,避免数据丢失。如果网络拥堵或接收端处理速度慢,数据会在发送缓冲区中等待,直到可以发送为止。

在数据传输中,我是客户端,对方是服务端。通过socket端口连接对面的服务进行发送,在数据发送过程中,其实是先将数据发送到客户端主机的sendBuf,然后再经过网络传输到对端主机的recvBuf,然后对面程序从recvBuf中读取数据。

Netty缓冲区

在Netty概念中,Buffer是数据载体的缓冲区,而在创建Netty客户端/服务端的时候,设置缓冲区就是数据在网络传输中的sendBuf和recvBuf。

bootstrap.childOption(ChannelOption.SO_SNDBUF, 32 * 1024); // 32KB
bootstrap.childOption(ChannelOption.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值