irpas技术客

Expiring 1 record(s) for 2:xxx ms has passed since batch问题研究_崔小樱

irpas 1139

本文主要对该错误相关文章进行整理,供自己以及各位参考,如有问题请及时指出,谢谢。

报错大意为:生产发送批次已经创建,但是已经过去120000ms,仍然没有发送,消息过期。

【20211015更新】(@高警,感谢提供资料) 当kafka服务器磁盘空间不足时,也会报此错误。清空磁盘空间,重启kafka服务即可解决。

主要原因有两类

https://stackoverflow.com/questions/46649748/kafka-producer-timeoutexception-expiring-1-records

共有3个可能解决方案

增大 request.timeout.ms 配置 这个配置指的是 kafka 等待发送批次大小(以字节为单位)的等待时间,如果超过该时间未满足批次大小,将会超时。减少 batch-size 配置 结合上面原因,降低批次条数,少量多发,减少等待时间。网络原因,无法满足高负载

但是也有人提出疑问: ling.ms 默认值时0,即使批次大小没有达到,也会立即发送的。 即使为了减少频繁发送的情况,假设设置为20ms(小于过期时间120000ms),那么过了这20ms,尽管批次大小没有到,生产者也会发送该批次的,是不会出现超时情况的。

https://stackoverflow.com/questions/56807188/how-to-fix-kafka-common-errors-timeoutexception-expiring-1-records-xxx-ms-has

该问题提出者,指出 对batch.size linger.ms request.time.out 都进行配置,但是依旧会报错。 仔细查看日志发现,发送消息时,目标topic的目标分区,是负数。 但是在该问题下,未发现更加合理的解决方案以及出现负数的原因,但是,大概率是因为这个问题导致的如标题的报错。

个人想法(临时解决该问题)

发送消息时,指定某个分区通过ProducerInterceptor重写分区逻辑 但是 要注意 分区逻辑对消费者消费数据是否有影响。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Expiring #1 #Records #for #2xxx #ms #has #passed