...
If the value is 'true' then the corresponding field is set in the InitProducerIdRequest
and the KafkaProducer
object is set into a state which only allows calling .commitTransaction
or .abortTransaction
.
If the transaction.two.phase.commit.enable setting is set to ‘false’ but keepPreparedTxn
is set to ‘true’ then the call fails with the INVALID_TXN_STATE
error.
New method will be added to KafkaProducer
:
...
Having a Boolean flag and then a timeout value seems redundant, we really need just either one of the other, so technically instead of adding an independent flag we could use a special timeout value to indicate that it’s a 2PC transaction. This, however, would couple intent with specific implementation; an explicit Boolean seems to reflect the intent better.
...
Disallowing keepPreparedTxn=true without 2PC
Without 2PC the notion of “prepared” transaction is subverted by the transaction.max.timeout.ms so Kafka cannot promise to keep transaction in-doubt until a decision is reached. So from a purity perspective using keepPreparedTxn=true doesn’t reflect the semantics.
...