In KIP-890 we introduced `TransactionAbortableException`. Transaction producer can throw both `TimeoutException` or `TransactionAbortableException`.
Applications using should handle TimeoutException from transaction producer as abortable because it’s not safe to retry the produce. Retrying would assign new sequence numbers to the messages, and if the original message had actually succeeded, the new messages would become duplicates, breaking exactly-once semantics. Details: https://lists.apache.org/thread/ox2dm8n9hpzwj0qo53ssm3ncl8f7cjso