当前位置:   article > 正文

Expiring 3623 record(s) for 2:xxx ms has passed since batch

has passed since batch

Expiring 3623 record(s) for 2:xxx ms has passed since batch

报错大意为:生产发送批次已经创建,但是已经过去120000ms,仍然没有发送,消息过期
(当kafka服务器磁盘空间不足时,也会报此错误。清空磁盘空间,重启kafka服务即可解决。)

主要原因有两类
1、
https://stackoverflow.com/questions/46649748/kafka-producer-timeoutexception-expiring-1-records

共有3个可能解决方案

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

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

2、
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的目标分区,是负数。
但是在该问题下,未发现更加合理的解决方案以及出现负数的原因,但是,大概率是因为这个问题导致的如标题的报错。

3、临时解决该问题

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/816187
推荐阅读
相关标签
  

闽ICP备14008679号