首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Kafka异常:Received exception when fetching the next record

Kafka异常:Received exception when fetching the next record

原创
作者头像
真率
发布2026-01-26 14:51:51
发布2026-01-26 14:51:51
830
举报
文章被收录于专栏:踩坑记录踩坑记录

某天,突然发现生产环境一些topic的kafka消费者,不再消费新的消息。通过查日志发现,出现如下报错后,消费便卡住了。

代码语言:java
复制
org.apache.kafka.common.KafkaException: Received exception when fetching the next record from topic-xxx-0. If needed, please seek past the record to continue consumption.
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.fetchRecords(Fetcher.java:1686) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.access$1900(Fetcher.java:1507) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher.fetchRecords(Fetcher.java:733) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:684) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.KafkaConsumer.pollForFetches(KafkaConsumer.java:1304) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1238) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1211) ~[kafka-clients-3.1.0.jar:?]
	at com.cicc.edsBoot.consumer.cdc.TaQualificationConsumer.run(TaQualificationConsumer.java:69) [edsApp.jar:3.0-SNAPSHOT]
Caused by: org.apache.kafka.common.KafkaException: java.lang.NoClassDefFoundError: net/jpountz/lz4/LZ4Exception
	at org.apache.kafka.common.record.CompressionType$4.wrapForInput(CompressionType.java:114) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.recordInputStream(DefaultRecordBatch.java:279) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.compressedIterator(DefaultRecordBatch.java:283) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.streamingIterator(DefaultRecordBatch.java:367) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.nextFetchedRecord(Fetcher.java:1629) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.fetchRecords(Fetcher.java:1666) ~[kafka-clients-3.1.0.jar:?]
	... 7 more
Caused by: java.lang.NoClassDefFoundError: net/jpountz/lz4/LZ4Exception
	at org.apache.kafka.common.record.CompressionType$4.wrapForInput(CompressionType.java:111) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.recordInputStream(DefaultRecordBatch.java:279) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.compressedIterator(DefaultRecordBatch.java:283) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.streamingIterator(DefaultRecordBatch.java:367) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.nextFetchedRecord(Fetcher.java:1629) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.fetchRecords(Fetcher.java:1666) ~[kafka-clients-3.1.0.jar:?]
	... 7 more
Caused by: java.lang.ClassNotFoundException: net.jpountz.lz4.LZ4Exception
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_71]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_71]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_71]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_71]
	at org.apache.kafka.common.record.CompressionType$4.wrapForInput(CompressionType.java:111) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.recordInputStream(DefaultRecordBatch.java:279) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.compressedIterator(DefaultRecordBatch.java:283) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.common.record.DefaultRecordBatch.streamingIterator(DefaultRecordBatch.java:367) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.nextFetchedRecord(Fetcher.java:1629) ~[kafka-clients-3.1.0.jar:?]
	at org.apache.kafka.clients.consumer.internals.Fetcher$CompletedFetch.fetchRecords(Fetcher.java:1666) ~[kafka-clients-3.1.0.jar:?]
	... 7 more 

而其他的一些topic消费都正常。

后来得知消费异常的这些topic的生产者服务最近进行了升级,而消费者服务、kafka服务并没有变化,所以基本可以确定,是生产者服务的升级导致的消费问题,但具体原因不明。


因为报错信息中有提示,可以跳过当前记录,所以我想通过更换消费者groupId的方式,来重置offset,以从最新的消息重新开始消费。但发现更换groupId后,马上又会出现上述报错,也无法消费新的消息。

后来通过分析异常信息中的Caused by,注意到LZ4Exception这个异常。通过搜索得知,lz4是一种压缩算法,最后一个Caused by的意思是缺少lz4的相关依赖。而kafka的生产者在生产消息时,也会对消息进行压缩,有none, snippy, gizp和lz4四种方式。如果生产者对消息进行了压缩,消费者也需要采用相同的算法,对消息进行解压才能消费。解压时,如果缺少相关算法的依赖,就会报上述异常。

一般来说,上述的四种压缩算法,都比较常见,大多数消费者服务也都会有相关依赖,但我们的服务开发的比较早,技术栈落后,依赖都需要人工上传到特定目录,现在生产环境的服务就缺少lz4相关的依赖。


到此,情况已经明了了。生产者服务升级以前,应该是没有对消息进行压缩的(compression.type=none)。而升级后采用了lz4算法进行压缩,恰恰我们的消费者缺少lz4的依赖,就导致消费被卡住了。

在把生产者的压缩方式改成none以后,果然又可以正常消费了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档