设为首页 加入收藏

TOP

解决Kafka重复消费问题
2019-04-23 14:25:26 】 浏览:41
Tags:解决 Kafka 重复 消费 问题

1.问题背景

某服务(用了SpringBoot + spring-kafka)处理Kafka消息时,发现每条消息处理时间长达60+秒。几百条消息处理完后,又重新从第一条开始重复消费。

2.原因分析

Kafka消费者有两个配置参数:

max.poll.interval.ms

两次poll操作允许的最大时间间隔。单位毫秒。默认值300000(5分钟)。

两次poll超过此时间间隔,Kafka服务端会进行rebalance操作,导致客户端连接失效,无法提交offset信息,从而引发重复消费。

max.poll.records

一次poll操作获取的消息数量。默认值50。

如果每条消息处理时间超过60秒,那么一批消息处理时间将超过5分钟,从而引发poll超时,最终导致重复消费。

3.对策分析

1)分析业务代码逻辑,进行性能优化,确保每条消息处理时间控制在合理范围

每条消息的处理时间不要超过5分钟。

如果超过5分钟,则考虑进行架构上的优化。

比如A线程消费消息,放到进程内部队列中,提交offset;其他线程从内部队列取消息,并处理业务逻辑。为防止内部队列消息积压,A线程需要监控队列中消息数量,超过一定量时进入等待。

2)适当增大max.poll.interval.ms的值

SpringBoot没有提供可调节此数值的参数。如果修改此数值,需要自己封装方法创建Kafka客户端:

org.apache.kafka.clients.consumer.KafkaConsumer.KafkaConsumer<String,String>(Properties)

3)适当减小max.poll.records的值

可通过SpringBoot配置参数"spring.kafka.consumer.max-poll-records"调整。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Kafka topic增加partitions 下一篇kafka 入门安装使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目