Hi,
Thanks for your work and sorry to bother you.
My code gets the same IllegalStateException from KafkaProducer as Kafka Stream
gets in KAFKA-16221:
java.lang.IllegalStateException: Cannot attempt operation `abortTransaction`
because the previous call to `commitTransaction` timed out and must be retried
at
org.apache.kafka.clients.producer.internals.TransactionManager.handleCachedTransactionRequestResult(TransactionManager.java:1109)
at
org.apache.kafka.clients.producer.internals.TransactionManager.beginAbort(TransactionManager.java:266)
at
org.apache.kafka.clients.producer.KafkaProducer.abortTransaction(KafkaProducer.java:835)
I have followed the recipe from
https://kafka.apache.org/37/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html
for error handling for a transactional producer, i.e.
try {
producer.beginTransaction();
for (int i = 0; i < 100; i++)
producer.send(new ProducerRecord<>("my-topic", Integer.toString(i),
Integer.toString(i)));
producer.commitTransaction();
} catch (ProducerFencedException | OutOfOrderSequenceException |
AuthorizationException e) {
// We can't recover from these exceptions, so our only option is to close
the producer and exit.
producer.close();
} catch (KafkaException e) {
// For all other exceptions, just abort the transaction and try again.
producer.abortTransaction();
}
producer.close();
Kafka Streams has solved KAFKA-16221 by introducing a hack
(https://github.com/apache/kafka/pull/15315), but plans a clean solution.
Does that mean that above recipe is outdated?
Is there really no simple, clean solution how to do the error handling?
Should I use the solution from https://github.com/apache/kafka/pull/15315 and
wait for what Kafka Streams comes up next for the clean solution?
Kind regards, Matthias Kraaz