I am following the producer with transactions example in https://kafka.apache.org/23/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html, and on kafkaException, I use abortTransaction and retry.
In some cases, abortTransaction fails, with:
org.apache.kafka.common.KafkaException: Cannot execute transactional method because we are in an error state
as far as I can tell, this is caused by
org.apache.kafka.common.KafkaException: The client hasn't received acknowledgment for some previously sent messages and can no longer retry them. It isn't safe to continue.
Since both are KafkaException, the example seems to imply they are retriable, but they seem not to be. Ideally, I would expect abortTransaction to succeed in this case (the broker will abort the transaction anyway because it can't be committed), but at the very least, I would expect to have a way to determine that the producer is unusable and it can't recover.