报错日志:
xx ms has passed since last append / xx ms has passed since batch creation plus linger time / ms has passed since last attempt plus backoff time
此异常错误即RecordBatch#maybeExpire方法抛出,意思是:在设置的timeout时间内send线程没有将client缓存内的请求发送出去。
原因通常来说为以下几种:
kafka服务端压力过大导致处理请求慢,查看kafka服务端压力是否过大;
客户端在短时间发送大量数据导致发送瓶颈;
一些参数配置和应用本身数据流量模型不匹配;
平台任务或者客户端本身压力过大(cpu/mem/full gc/网络等等);
broker机器故障;
怎么处理
服务端压力过大可以增加服务端partition数量
客户端问题,由于其在短时间可能读取发送大量数据导致客户端发送瓶颈,即生成数据的速度大于客户端发送的速度。 a. 判断发送的数据量,根据能力减少数据量均匀发送; b. 判断发送的数据量,增加任务节点或者并发度分摊数据量发送; c. 客户端设置request.timeout.ms为60*1000,或者更大。
其他常见的参数调整,参数调优更多和应用自身的一些流量模型相关。 a. 调整batch.size或者linger.ms,通常调大比如到几兆,减少发送qps。对于qps过高的可以进行调整。(核心思想,攒批,提高性能)
客户端压力过大,cpu/mem/gc/net等导致发送超时。调整资源配置等
broker机器故障,切换机器。
注意:本文归作者所有,未经作者允许,不得转载