转行到大数据将近一年了,在工作中经常遇到 kafka send data 超时的报错,今天给各位道友浅谈一下这类问题的经验:

报错日志:
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缓存内的请求发送出去。

原因通常来说为以下几种:

  1. kafka服务端压力过大导致处理请求慢,查看kafka服务端压力是否过大;
  2. 客户端在短时间发送大量数据导致发送瓶颈;
  3. 一些参数配置和应用本身数据流量模型不匹配;
  4. 平台任务或者客户端本身压力过大(cpu/mem/full gc/网络等等);
  5. broker机器故障;

怎么处理

  1. 服务端压力过大可以增加服务端partition数量
  2. 客户端问题,由于其在短时间可能读取发送大量数据导致客户端发送瓶颈,即生成数据的速度大于客户端发送的速度。 a. 判断发送的数据量,根据能力减少数据量均匀发送; b. 判断发送的数据量,增加任务节点或者并发度分摊数据量发送; c. 客户端设置request.timeout.ms为60*1000,或者更大。
  3. 其他常见的参数调整,参数调优更多和应用自身的一些流量模型相关。 a. 调整batch.size或者linger.ms,通常调大比如到几兆,减少发送qps。对于qps过高的可以进行调整。(核心思想,攒批,提高性能)
  4. 客户端压力过大,cpu/mem/gc/net等导致发送超时。调整资源配置等
  5. broker机器故障,切换机器
Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐