# org.apache.kafka.common.errors.TransactionAbortableException: The transaction has been aborted by the coordinator

- **ID:** `kafka/transaction-abortable`
- **Domain:** kafka
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 75%

## Root Cause

Transactional coordinator aborted the transaction due to a timeout, fencing, or coordinator failover.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Kafka 3.4.0 | active | — | — |
| Kafka 3.5.0 | active | — | — |
| Kafka 3.6.0 | active | — | — |

## Workarounds

1. **Retry the transaction with a new transactional.id after aborting the current one.
Code example:
producer.initTransactions();
try {
  producer.beginTransaction();
  // send messages
  producer.commitTransaction();
} catch (TransactionAbortableException e) {
  producer.abortTransaction();
  // Reinitialize with a new transactional.id
  properties.put("transactional.id", "new-txn-id-" + System.currentTimeMillis());
  producer.close();
  producer = new KafkaProducer<>(properties);
  producer.initTransactions();
}** (75% success)
   ```
   Retry the transaction with a new transactional.id after aborting the current one.
Code example:
producer.initTransactions();
try {
  producer.beginTransaction();
  // send messages
  producer.commitTransaction();
} catch (TransactionAbortableException e) {
  producer.abortTransaction();
  // Reinitialize with a new transactional.id
  properties.put("transactional.id", "new-txn-id-" + System.currentTimeMillis());
  producer.close();
  producer = new KafkaProducer<>(properties);
  producer.initTransactions();
}
   ```
2. **Increase transaction coordinator timeout and ensure stable network.
Command to check coordinator:
kafka-transactions --bootstrap-server localhost:9092 --describe --transactional-id my-txn-id
Set in producer config:
properties.put("transaction.timeout.ms", "60000");
properties.put("max.block.ms", "120000");** (70% success)
   ```
   Increase transaction coordinator timeout and ensure stable network.
Command to check coordinator:
kafka-transactions --bootstrap-server localhost:9092 --describe --transactional-id my-txn-id
Set in producer config:
properties.put("transaction.timeout.ms", "60000");
properties.put("max.block.ms", "120000");
   ```

## Dead Ends

- **Increase transaction.timeout.ms to 3600000** — Longer timeout may mask underlying issues like coordinator instability or network partitions. (50% fail)
- **Disable idempotent producer** — Transactions require idempotent producer; disabling it causes different errors. (90% fail)
- **Restart all brokers** — Restarting brokers does not clear the aborted transaction state; coordinator still has the abort marker. (80% fail)
