You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Patrick Haas (JIRA)" <ji...@apache.org> on 2018/11/19 21:29:01 UTC
[jira] [Updated] (KAFKA-7656) ReplicaManager fetch fails on leader
due to long/integer overflow
[ https://issues.apache.org/jira/browse/KAFKA-7656?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Patrick Haas updated KAFKA-7656:
--------------------------------
Description:
(Note: From 2.0.1-cp1 from confluent distribution)
This may not be the root cause, but the immediate issue is that [Log#read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1179] computes *maxPosition* as a long, which is then passed to
val fetchInfo = [segment.read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1192](startOffset, maxOffset, maxLength, *{color:#FF0000}maxPosition{color}*, minOneMessage)
This results in Integer.MIN_VALUE getting passed, which triggers an assertion error.
{{[2018-11-19 21:13:13,687] ERROR [ReplicaManager broker=103] Error processing fetch operation on partition __consumer_offsets-20, offset 0 (kafka.server.ReplicaManager)}}
{{java.lang.IllegalArgumentException: Invalid max size -2147483648 for log read from segment FileRecords(file= /prod/kafka/data/kafka-logs/__consumer_offsets-20/00000000000000000000.log, start=0, end=2147483647)}}
{{ at kafka.log.LogSegment.read(LogSegment.scala:274)}}
{{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1159)}}
{{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1114)}}
{{ at kafka.log.Log.maybeHandleIOException(Log.scala:1842)}}
{{ at kafka.log.Log.read(Log.scala:1114)}}
{{ at kafka.server.ReplicaManager.kafka$server$ReplicaManager$$read$1(ReplicaManager.scala:912)}}
{{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:974)}}
{{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:973)}}
{{ at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)}}
{{ at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)}}
{{ at kafka.server.ReplicaManager.readFromLocalLog(ReplicaManager.scala:973)}}
{{ at kafka.server.ReplicaManager.readFromLog$1(ReplicaManager.scala:802)}}
{{ at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:815)}}
{{ at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:685)}}
{{ at kafka.server.KafkaApis.handle(KafkaApis.scala:114)}}
{{ at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:69)}}
{{ at java.lang.Thread.run(Thread.java:748)}}
was:
(Note: From 2.0.1-cp1 from confluent distribution)
This may not be the root cause, but the immediate issue is that [Log#read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1179] computes *maxPosition* as a long, which is then passed to
{{ val fetchInfo = [segment.read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1192](startOffset, maxOffset, maxLength, *{color:#FF0000}maxPosition{color}*, minOneMessage)}}
This results in Integer.MIN_VALUE getting passed, which triggers an assertion error.
{{[2018-11-19 21:13:13,687] ERROR [ReplicaManager broker=103] Error processing fetch operation on partition __consumer_offsets-20, offset 0 (kafka.server.ReplicaManager)}}
{{java.lang.IllegalArgumentException: Invalid max size -2147483648 for log read from segment FileRecords(file= /prod/kafka/data/kafka-logs/__consumer_offsets-20/00000000000000000000.log, start=0, end=2147483647)}}
{{ at kafka.log.LogSegment.read(LogSegment.scala:274)}}
{{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1159)}}
{{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1114)}}
{{ at kafka.log.Log.maybeHandleIOException(Log.scala:1842)}}
{{ at kafka.log.Log.read(Log.scala:1114)}}
{{ at kafka.server.ReplicaManager.kafka$server$ReplicaManager$$read$1(ReplicaManager.scala:912)}}
{{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:974)}}
{{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:973)}}
{{ at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)}}
{{ at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)}}
{{ at kafka.server.ReplicaManager.readFromLocalLog(ReplicaManager.scala:973)}}
{{ at kafka.server.ReplicaManager.readFromLog$1(ReplicaManager.scala:802)}}
{{ at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:815)}}
{{ at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:685)}}
{{ at kafka.server.KafkaApis.handle(KafkaApis.scala:114)}}
{{ at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:69)}}
{{ at java.lang.Thread.run(Thread.java:748)}}
> ReplicaManager fetch fails on leader due to long/integer overflow
> -----------------------------------------------------------------
>
> Key: KAFKA-7656
> URL: https://issues.apache.org/jira/browse/KAFKA-7656
> Project: Kafka
> Issue Type: Bug
> Components: core
> Affects Versions: 2.0.1
> Environment: Linux 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
> Reporter: Patrick Haas
> Priority: Major
>
> (Note: From 2.0.1-cp1 from confluent distribution)
> This may not be the root cause, but the immediate issue is that [Log#read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1179] computes *maxPosition* as a long, which is then passed to
> val fetchInfo = [segment.read|https://github.com/apache/kafka/blob/9646602d6832ad0a5f2e9b65af5df1a80a571691/core/src/main/scala/kafka/log/Log.scala#L1192](startOffset, maxOffset, maxLength, *{color:#FF0000}maxPosition{color}*, minOneMessage)
> This results in Integer.MIN_VALUE getting passed, which triggers an assertion error.
>
> {{[2018-11-19 21:13:13,687] ERROR [ReplicaManager broker=103] Error processing fetch operation on partition __consumer_offsets-20, offset 0 (kafka.server.ReplicaManager)}}
> {{java.lang.IllegalArgumentException: Invalid max size -2147483648 for log read from segment FileRecords(file= /prod/kafka/data/kafka-logs/__consumer_offsets-20/00000000000000000000.log, start=0, end=2147483647)}}
> {{ at kafka.log.LogSegment.read(LogSegment.scala:274)}}
> {{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1159)}}
> {{ at kafka.log.Log$$anonfun$read$2.apply(Log.scala:1114)}}
> {{ at kafka.log.Log.maybeHandleIOException(Log.scala:1842)}}
> {{ at kafka.log.Log.read(Log.scala:1114)}}
> {{ at kafka.server.ReplicaManager.kafka$server$ReplicaManager$$read$1(ReplicaManager.scala:912)}}
> {{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:974)}}
> {{ at kafka.server.ReplicaManager$$anonfun$readFromLocalLog$1.apply(ReplicaManager.scala:973)}}
> {{ at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)}}
> {{ at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)}}
> {{ at kafka.server.ReplicaManager.readFromLocalLog(ReplicaManager.scala:973)}}
> {{ at kafka.server.ReplicaManager.readFromLog$1(ReplicaManager.scala:802)}}
> {{ at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:815)}}
> {{ at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:685)}}
> {{ at kafka.server.KafkaApis.handle(KafkaApis.scala:114)}}
> {{ at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:69)}}
> {{ at java.lang.Thread.run(Thread.java:748)}}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)