目录

前言

排查与解决

总结


前言

前段时间线上某个业务系统的Kafka消费端出现数据异常,一直在重复消费某个时间段内的数据,导致界面上重复数据越来越多,询问运维发现前几日有出现过一次网络波动,推测可能是由此引发。

排查与解决

分别查看服务端和消费端日志后,发现服务端正常生产数据并成功推送至Kafka,由于一开始消费端日志看的不仔细并没注意到 Failing OffsetCommit request since the consumer(坑爹的日志打印级别竟然是info),所以浪费了一些时间,也误导了一开始的排查方向,一通排查下来都挺正常发现问题只能是在消费端,通过查阅资料发现上述该日志打印是由于消费完提交offset出错,当消费者无法在指定的时间之内完成消息消费的话,kafka会触发rebalance机制,会将该consumer从消费者组中移除,同时消费端又有 auto-offset-reset=earliest 配置项,因此当消费端重新连接时又会从当前分区下已提交的offset开始消费,导致出现重复消费。

因此问题根源就是消费端处理消息消费时间太慢,kafka默认消息消费超时时间为300s,默认拉取数据500条,因此当数据量大每条数据处理必须控制在0.6s以下,否则按照默认配置就会触发rebalance机制,因此可以通过调大消息消费超时时间:max.poll.interval.ms,或者减少每次拉取的数据:max.poll.records,来解决消息消费超时的问题,让运维将每次拉取数据改为100便完美解决本次问题。

总结

以后看日志一定要仔细,某些错误可能就藏在info级别下,同时针对部分info日志也不能过于忽略,遇到不懂的也得及时查找资料不能暂时跳过,同时kafka的消费流程和一些名词也需要再好好温故下了,争取改天能整理一下