问题描述:
实时处理程序:streaming消费kafka一段时间后,报错:ERROR kafka.server.ReplicaManager: [Replica Manager on Broker 105]: Error processing fetch operation on partition [TOPICXXXX,1] offset 57479118
java.lang.IllegalStateException: Failed to read complete buffer for targetOffset 61099082 startPosition 2147483494 in /opt/data/kafka/data/TOPICXXXX-1/00000000000043109340.log
2019-01-10 10:05:01,732 ERROR kafka.server.ReplicaManager: [Replica Manager on Broker 105]: Error processing fetch operation on partition [CLLSEN-BRIDGE-HF-STRAIN,1] offset 57479118
java.lang.IllegalStateException: Failed to read complete buffer for targetOffset 61099082 startPosition 2147483494 in /opt/data/kafka/data/TOPICXXXX-1/00000000000043109340.log
at kafka.log.FileMessageSet.searchFor(FileMessageSet.scala:137)
at kafka.log.LogSegment.translateOffset(LogSegment.scala:106)
at kafka.log.LogSegment.read(LogSegment.scala:151)
at kafka.log.Log.read(Log.scala:532)
at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:543)
at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:513)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.immutable.Map$Map4.foreach(Map.scala:188)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at kafka.server.ReplicaManager.readFromLocalLog(ReplicaManager.scala:513)
at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:468)
at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:496)
at kafka.server.KafkaApis.handle(KafkaApis.scala:77)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
at java.lang.Thread.run(Thread.java:745)
2019-01-10 10:05:01,733 ERROR kafka.server.ReplicaManager: [Replica Manager on Broker 105]: Error processing fetch operation on partition [TOPICXXXX,1] offset 57479118
java.lang.IllegalStateException: Failed to read complete buffer for targetOffset 61099082 startPosition 2147483494 in /opt/data/kafka/data/TOPICXXXX-1/00000000000043109340.log
at kafka.log.FileMessageSet.searchFor(FileMessageSet.scala:137)
at kafka.log.LogSegment.translateOffset(LogSegment.scala:106)
at kafka.log.LogSegment.read(LogSegment.scala:151)
at kafka.log.Log.read(Log.scala:532)
at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:543)
at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:513)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.immutable.Map$Map4.foreach(Map.scala:188)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at kafka.server.ReplicaManager.readFromLocalLog(ReplicaManager.scala:513)
at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:468)
at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:496)
at kafka.server.KafkaApis.handle(KafkaApis.scala:77)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
at java.lang.Thread.run(Thread.java:745)
实时处理程序:storm消费kafka一段时间后,也报错以上错误!
程序消费不过来吗还是别的原因呢?
原因分析:
由于程序消费不过来,kafka中的消息数据已经过时了。但是我配置的是保留7天啊?而且也没有配置消息保存的大小。重新修改groupid消费也是重最新的消息(auto.offset.reste=latest);怎么疯狂的报错,由于数据量很大,导致日志非常快:1小时将近20G的日志,没过几天服务器就磁盘满了,集群都崩溃了。。。。
解决方式:
1、暂时解决方法:修改group,重新启动程序!但是跑几个小时到1天又会复现问题!!
2、其他尝试解决方法:经过对kafka源码研究,发现原因大概是:因为2147483646这个数字的问题,做好是字节的整数倍,不能随意填写。否则当kafka数据写到最后一行时,会强制重新生成一个文件,而如果不是字节的整数倍,切分就导致出问题。
因此,当你的文档达到2G切换文件的时候就出现那个问题啦,多多注意吧!
解决方法:修改kafak配置:::修改:log.segment.bytes
修改为:
重启后,发现没问题了!!!
====================================
其他配置参考: