Kafka服务报错:java.nio.BufferUnderflowException 的解决

一次测试环境kafka服务报错解决

文章目录

  • 问题现象
  • 问题分析
  • 得出原因
  • 解决

问题现象

kafka集群由3台组成,消费者生产者都正常在跑,数据也没啥问题,但是kafka服务端仍然在报错,报错信息如下:

[2019-05-31 10:55:27,540] ERROR Processor got uncaught exception. (kafka.network.Processor)
java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Buffer.java:506)
	at java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java:361)
	at kafka.api.FetchRequest$$anonfun$1$$anonfun$apply$1.apply(FetchRequest.scala:53)
	at kafka.api.FetchRequest$$anonfun$1$$anonfun$apply$1.apply(FetchRequest.scala:52)
	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
	at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
	at scala.collection.immutable.Range.foreach(Range.scala:141)
	at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
	at scala.collection.AbstractTraversable.map(Traversable.scala:105)
	at kafka.api.FetchRequest$$anonfun$1.apply(FetchRequest.scala:52)
	at kafka.api.FetchRequest$$anonfun$1.apply(FetchRequest.scala:49)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.immutable.Range.foreach(Range.scala:141)
	at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
	at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
	at kafka.api.FetchRequest$.readFrom(FetchRequest.scala:49)
	at kafka.network.RequestChannel$Request$$anonfun$2.apply(RequestChannel.scala:65)
	at kafka.network.RequestChannel$Request$$anonfun$2.apply(RequestChannel.scala:65)
	at kafka.network.RequestChannel$Request$$anonfun$4.apply(RequestChannel.scala:71)
	at kafka.network.RequestChannel$Request$$anonfun$4.apply(RequestChannel.scala:71)
	at scala.Option.map(Option.scala:145)
	at kafka.network.RequestChannel$Request.(RequestChannel.scala:71)
	at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:488)
	at kafka.network.Processor$$anonfun$processCompletedReceives$1.apply(SocketServer.scala:483)
	at scala.collection.Iterator$class.foreach(Iterator.scala:727)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
	at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
	at kafka.network.Processor.processCompletedReceives(SocketServer.scala:483)
	at kafka.network.Processor.run(SocketServer.scala:413)
	at java.lang.Thread.run(Thread.java:748)

问题分析

  • 此前由于换了kafka-client包,但是只生产者换了kafka-client,消费者没换,导致不能消费,排查问题时查到kafka服务端,发现报错,就想到了应该是与kafka通信的客户端版本可能有差异导致。因为不同client版本发送数据字字节长度和读取数据字节长度有差异。

  • 一排查,发现了生产者的kafka-client版本高于消费者,赶紧改。改完消费端没问题了,可是服务端仍然在报错。。。

  • 一开始的排查思路有问题吗?没问题,就是kafka通信之间协议版本不对,再沿着这个思路扣,想到还有kafka集群之间的通信,因为他们之间至少有个副本备份的逻辑。一排查,果然如此

得出原因

  • 两台kafka服务部署的时2.10_0.10.0.0版本,一台部署的是2.10_0.10.1.1版本

解决

保持kafka集群部署的版本完全一致,我是都换成了2.10_0.10.0.0版

你可能感兴趣的:(大数据,Kafka)