消息体大小问题导致kafka消费者消费阻塞

问题:

生产环境使用kafka进行双活机房redis集群数据同步,某天收到双机房redis集群数据量不一致的告警,对同步情况进行排查,发现对端机房被同步的topic有大量消息堆积,使用kafdrop查看分区数据消费情况,发现大部分分区消费正常,堆积很少,少量分区堆积巨大,offset不再更新,被阻塞了。

 

分析:

查看consumer测日志,发现大量打印以下错误日志

"ERROR: Consumer Message Fatal Error

java.lang.IllegalStateException: Iterator is in failed state"

往前查找日志,发现在第一次打印上面日志之前,有一条报错:

"kafka.common.MessageSizeTooLargeException: Found a message lager than the maximum fetch size of this consumer on topic xxxx partition 2 at fetch offset xxxxx. Increase the fetch size , or decrease the maximum massage size the broker will allow."

发现是消息体大于consumer最大配置,导致阻塞

 

根因:

1.业务使用redis集群存在大于1M的key

2.业务侧配置kafka producer配置最大发送消息大小为10M: max.request.bytes=10485760

3.kafka服务端broker配置最大消息大小为10M:

message.max.bytes=10485760

replica.fetch.max.bytes=10485760

3.对端kafka consumer没有修改最大消息体大小配置,使用默认配置,最大消息体大小为1M: fetch.message.max.bytes=1048576

 

总结提升:

1.流程把控:该问题是业务/redis/kafka三个产品没有完全协商一致导致的,后面应该沟通到位,信息传递到位

2.版本优化:kafka consumer应该对超过最大限制的消息进行丢弃,不应该阻塞

2.告警优化:原则上应该收到三处告警,topic堆积告警,双活机房数据量不一致告警,consumer主机磁盘空间告警,以及consumer日志监控ERROR关键字告警

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值