0


消息队列-kafka关于CommitFailedException问题

说明:转载本人掘金文章

概述

提交offset失败这个异常也是我们开发中常见的异常,那么这个异常是怎么引起的呢?只要我们明白原因,那么就能避免,特别是在异步提交情况下(offset丢失),导致重复消费,消息一直卡在最后一批,导致业务数据受到严重的破坏。

了解消费者实例机制

1.kafka消费者都是按照批量消息拿过来消费的,因为发送也是批量的,这样可以提高kafka性能

2.kafka中消费者有个参数max.poll.interval.ms(获取下一批消息间隔时间),如果上一批还没在这个事件之内处理完,那么kafka认为当前分配到当前分区的消费者实例一定出现了故障,为了不影响当前分区消费,将当前消费者实例剔除

3.kafka将触发rebalance,重新为当前分区分配新的消费者实例,这样保证分区能正常被消费

4.我们只要根据我们业务正常的设置max.poll.interval.ms,来评估我们消费一批数据时间即可避免

解决方案

1.设置一批数据能在max.poll.interval.ms处理完。比如一条消息需要处理1000ms,当前一批数据最多是10条,那么你只要将max.poll.interval.ms设置大于10000ms即可

2.设置一批数据最大数量(max.poll.records)。比如max.poll.interval.ms是11000ms,处理一条数据需要1000ms,那么你将max.poll.records设置为10即可

案例

发生CommitFailedException

标签: kafka java 分布式

本文转载自: https://blog.csdn.net/weixin_38312719/article/details/124823941
版权归原作者 star++ 所有, 如有侵权,请联系我们删除。

“消息队列-kafka关于CommitFailedException问题”的评论:

还没有评论