DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
__transaction_state: schema
...
Flow A — Regular Consumer Group (how it works today)
- Producer writes to output topic
- Source Component:
TransactionManager(Client) - Action: Sends
AddPartitionsToTxn("output-A-0")toTxnCoord. - State Change:
TxnCoordrecordsparticipants = {output-A-0}in__transaction_state.
- Source Component:
- Producer calls sendOffsetsToTransaction("my-group")
- Source Component:
TransactionManager(Client) &TransactionCoordinator(Broker Core) - Action: Sends
AddOffsetsToTxn("my-group")toTxnCoord. - Execution:
TxnCoordcomputeshash("my-group") = (let's say) 7. - State Change: Records
participants = {output-A-0, __consumer_offsets-7}in__transaction_state.
- Source Component:
- Producer commits
- Source Component:
TransactionCoordinator(Broker Core) - Execution: Reads participants from
__transaction_stateand resolves brokers viaMetadataCache:output-A-0— > Broker 3__consumer_offsets-7---→ Broker 4
- Action: Sends
WriteTxnMarkersto Broker 3 AND Broker 4.
- Source Component:
- Each broker writes a control batch to its log
- Source Component:
KafkaApis&GroupCoordinator(Broker Core) - Execution:
- Broker 3: Appends
COMMITbatch tooutput-A-0log (makes records visible toread_committedconsumers). - Broker 4: Appends
COMMITbatch to__consumer_offsets-7log (makes staged offsets visible toGroupCoordinator).
- Broker 3: Appends
- Source Component:
State machine additions:
- New transient state TX_PENDING
- On WriteTxnMarkers commit: TX_PENDING(ACCEPT) → ACKNOWLEDGED; same for RELEASE and REJECT.
- On WriteTxnMarkers abort: TX_PENDING(*) → back to ACQUIRED (lock continues; consumer can retry the work).
...