kafka用命令发送数据,报 TimeoutException: Expiring 1 record(s) for test-0: 30045 ms has passed since batch creation plus linger time?

╰(‵□′)╯ 发表于: 2018-07-14   最后更新时间: 2021-08-16 22:53:13   6,399 游览

发送kafka消息,包错,命令:

./kafka-console-producer.sh --broker-list 192.168.34.11:9092 --topic test

错误信息:

ERROR Error when sending message to topic test with key: null, value: 10 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-0: 30045 ms has passed since batch creation plus linger time?
发表于 2018-07-14
添加评论

你这个是超时额。telnet下。

只有这个topic会报错,其他topic都好使,并且我定位到代码RecordBatch类maybeExpire这个方法:

!this.inRetry() && requestTimeoutMs < (now - (this.createdMs + lingerMs)

第一个问题:这是在什么情况会走这个分支?
第二个问题:我把 requestTimeoutMs 这个参数改成50000ms,50000ms后依然报这个错(50045 ms has passed....),能解释一下这快代码是如何运转,才导致这种情况的么?

你的listener配置的什么,看看

listeners=PLAINTEXT://192.168.34.11:9092  ,写IP地址了,

这个telnet 192.168.34.11 9092 是ok的?
你这个是网络超时,优先关注网络呀,防火墙什么的。

只有一个topic不好使,其他都好使

test-0分区,是不是之前有调整过磁盘或者重装过?

我猜测也是这个问题,但是我想知道代码的哪个流程造成的这种现象?不管我设定 requestTimeoutMs为多少,都会有问题,看代码不合理啊

服务端没认为成功,客户端设置多少都会超时。

我想从代码层面了解流程机制。。。。。

你的答案

查看kafka相关的其他问题或提一个您自己的问题