kafka 错误日志TimeoutException: Timeout of 60000ms expired before the last committed offset for partitio

背景

我们有一个应用会发送用户点击事件到kafka主题中,然后我们使用消息作业消费kafka主题的点击事件消息,然后统计不同类型事件的计数值,但是生产上突然告警说kafka主题队列堆积超过1亿,惊讶万分,记录下本次问题查找的过程

无法消费kafka主题的消息

查询job消费域的日志,出现以下消息:

1.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the last committed offset for partitions could be determined. Try tuning default.api.timeout.ms larger to relax the threshold.

google发现这意味消费者在60s内没法拉取到kafka的offset偏移,一般是长gc导致,迅速查询了下gc日志,发现在这个错误之前确实有一个100s的gc,但是gc恢复后就开始出现这个日志,并且此时没有长gc存在了

2.The following partitions still have unstable offsets which are not cleared on the broker side:, this could be either transactional offsets waiting for completion, or normal offsets waiting for replication after appending to local log

随后出现的这个日志一开始以为是生产者域使用了kafka的事务,然后长时间未提交事务导致消费者没法消费,如果真的生产者使用事务并且长时间未提交的话,确实可能会导致消费者没法消费,此外,服务器的从broker长时间没法从主broker同步到消息也会导致这个日志的出现,但是这两种情形随后都被一一排除了,kafka生产者根本没有使用事务,并且kafka服务器集群并没有日志表明主从间数据复制延迟,

至此,陷入困境,只能重启job消费者域,发现依然未能恢复,此时由于错误日志显示它读取的offset应该是有某种问题,随后我们把这个kafka主题的消息进行回溯,跳过这个有问题的offset,问题竟然得到解决,令人惊异的是我们试验把kafka主题的offset重置到历史的offset,重复消费一些已经消费过的消息,发现也可以解决这个问题,消费者域在随后消费错误日志中显示的offset偏移时是正常的

https://forum.confluent.io/t/consumers-complaining-about-unstable-offsets/3102/2

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值