记录kafka出现的问题,原因,与对应场景下的解决方案.
造成问题方式有很多种,这里只是记录遇到的或已知的,若有遗漏情况欢迎补充
由于问题很多出现在生产环境,故敏感信息已屏蔽,不影响问题介绍

环境

  • linux
  • jdk1.8
  • kafka-client 0.10.x.x
  • kafka-server 0.10.x.x

问题

kafka-Client报错如下

2019-10-30 17:03:39.048 [kafka-producer-network-thread | producer-2] ERROR (这里是一些业务自定义信息,设计隐私,不便展示)
com.mym.test.exception.MsgSendFailException: org.apache.kafka.common.errors.TimeoutException: Batch containing 5 record(s) expired due to timeout while requesting metadata from brokers for TOPIC_1
        at com.mym.test.produce.Producer10$1.onCompletion(Producer10.java:30)
        at org.apache.kafka.clients.producer.internals.RecordBatch.done(RecordBatch.java:109)
        at org.apache.kafka.clients.producer.internals.RecordBatch.maybeExpire(RecordBatch.java:155)
        at org.apache.kafka.clients.producer.internals.RecordAccumulator.abortExpiredBatches(RecordAccumulator.java:235)
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:205)
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:134)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.kafka.common.errors.TimeoutException: Batch containing 5 record(s) expired due to timeout while requesting metadata from brokers for TOPIC_1

重点

Caused by: org.apache.kafka.common.errors.TimeoutException: Batch containing 5 record(s) expired due to timeout while requesting metadata from brokers for TOPIC_1

分析原因

从报错信息可知,由于发送时请求kafka的brokers的metadata超时,导致数据被过期处理。即移除发送队列缓冲区(异步发送时),且会回调onComplete方法(如果设置了Callback时),exception传入onComplete方法告知上层给调用方本次数据发送失败。

  • 出此报错信息一般是因为kafka集群内部有问题
  • 可能是kakfa某个broker"被下线",或者真的下线停了
  • 可能kafka集群内部有问题,某个分区leader正在reblance,时间过久

参考解决思路

  • 一般kafka集群出了问题短时间自动恢复后,kafka-client也能感知到也能自动恢复。
  • 长时间挂掉的话,kafka-client可能也死了,就需要手动干预重启kafka-clien或通过其他干预或检测手段来恢复,一般思路原理就是重建连或手动让旧kafka-client连接再次尝试链接
  • 确定kafka-client与kafka-server无网络问题
  • zk上查看kafka是否有broker掉线
  • 逐一检查kafka的log,看是否有报错或有效信息,一般要多看点日志,kafka集群除了点问题,如果集群够大,可能恢复也要一定时间,这短时间可能仍然无法使用

造成问题方式有很多种,这里只是记录遇到的或已知的,若有遗漏情况欢迎补充

Logo

更多推荐