[ https://issues.apache.org/jira/browse/KAFKA-5429?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jason Gustafson resolved KAFKA-5429. ------------------------------------ Resolution: Fixed Issue resolved by pull request 3300 [https://github.com/apache/kafka/pull/3300] > Producer IllegalStateException: Batch has already been completed > ---------------------------------------------------------------- > > Key: KAFKA-5429 > URL: https://issues.apache.org/jira/browse/KAFKA-5429 > Project: Kafka > Issue Type: Sub-task > Components: clients, core, producer > Reporter: Jason Gustafson > Assignee: Jason Gustafson > Fix For: 0.11.0.0 > > > I've seen this a few times in system tests: > {code} > [2017-06-10 19:47:38,434] ERROR Uncaught error in request completion: > (org.apache.kafka.clients.NetworkClient) > java.lang.IllegalStateException: Batch has already been completed > at > org.apache.kafka.clients.producer.internals.ProducerBatch.done(ProducerBatch.java:157) > at > org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:576) > at > org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:555) > at > org.apache.kafka.clients.producer.internals.Sender.handleProduceResponse(Sender.java:479) > at > org.apache.kafka.clients.producer.internals.Sender.access$100(Sender.java:75) > at > org.apache.kafka.clients.producer.internals.Sender$1.onComplete(Sender.java:666) > at > org.apache.kafka.clients.ClientResponse.onComplete(ClientResponse.java:101) > at > org.apache.kafka.clients.NetworkClient.completeResponses(NetworkClient.java:454) > at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:446) > at > org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:206) > at > org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:162) > at java.lang.Thread.run(Thread.java:745) > [2 > {code} > I think this is probably caused by aborting in-flight batches after an error > state. See the following log: > {code} > [2017-06-10 19:47:38,425] ERROR Aborting producer batches due to fatal error > (org.apache.kafka.clients.producer.internals.Sender) > org.apache.kafka.common.errors.OutOfOrderSequenceException: The broker > received an out of order sequence number > [2017-06-10 19:47:38,425] DEBUG [TransactionalId my-first-transactional-id] > Transition from state ABORTABLE_ERROR to ABORTING_TRANSACTION > (org.apache.kafka.clients.producer.internals.TransactionManager) > [2017-06-10 19:47:38,425] TRACE Produced messages to topic-partition > output-topic-0 with base offset offset -1 and error: {}. > (org.apache.kafka.clients.producer.internals.ProducerBatch) > org.apache.kafka.common.errors.OutOfOrderSequenceException: The broker > received an out of order sequence number > [2017-06-10 19:47:38,425] DEBUG [TransactionalId my-first-transactional-id] > Enqueuing transactional request (type=EndTxnRequest, > transactionalId=my-first-transactional-id, producerId=2000, producerEpoch=0, > result=ABORT) (org.apache.kafka.clients.producer.internals.TransactionManager) > [2017-06-10 19:47:38,426] TRACE [TransactionalId my-first-transactional-id] > Request (type=EndTxnRequest, transactionalId=my-first-transactional-id, > producerId=2000, producerEpoch=0, result=ABORT) dequeued for sending > (org.apache.kafka.clients.producer.internals.TransactionManager) > [2017-06-10 19:47:38,426] DEBUG [TransactionalId my-first-transactional-id] > Sending transactional request (type=EndTxnRequest, > transactionalId=my-first-transactional-id, producerId=2000, producerEpoch=0, > result=ABORT) to node worker11:9092 (id: 3 rack: null) > (org.apache.kafka.clients.producer.internals.Sender) > [2017-06-10 19:47:38,434] TRACE Received produce response from node 2 with > correlation id 514 (org.apache.kafka.clients.producer.internals.Sender) > [2017-06-10 19:47:38,434] DEBUG Incremented sequence number for > topic-partition output-topic-0 to 4500 > (org.apache.kafka.clients.producer.internals.Sender) > [2017-06-10 19:47:38,434] TRACE Produced messages to topic-partition > output-topic-0 with base offset offset 7033 and error: null. > (org.apache.kafka.clients.producer.internals.ProducerBatch) > [2017-06-10 19:47:38,434] ERROR Uncaught error in request completion: > (org.apache.kafka.clients.NetworkClient) > java.lang.IllegalStateException: Batch has already been completed > {code} > A simple solution is to add a separate flag to indicate that the batch has > been aborted. We can check it when the response returns and skip the callback. -- This message was sent by Atlassian JIRA (v6.4.14#64029)