# org.apache.kafka.common.errors.TransactionAbortableException: 事务已被协调器中止

- **ID:** `kafka/transaction-abortable`
- **领域:** kafka
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 75%

## 根因

事务协调器因超时、围栏或协调器故障转移而中止事务。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Kafka 3.4.0 | active | — | — |
| Kafka 3.5.0 | active | — | — |
| Kafka 3.6.0 | active | — | — |

## 解决方案

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();
}
   ```
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");
   ```

## 无效尝试

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