Expiring 3623 record(s) for 2:xxx ms 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重写分区逻辑
但是 要注意 分区逻辑对消费者消费数据是否有影响。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值