DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
Flow — Share Group (THIS KIP)
- producer.send("output-A", record)
- Source Component:
TransactionManager(Client) - Action: Sends
AddPartitionsToTxnRequest(["output-A-0"]). - State Change: Updates local state to
TransactionMetadata.topicPartitions = {output-A-0}.
- Source Component:
- producer.sendShareAcknowledgementsToTransaction(acks, meta)
- Source Component:
TransactionManager(Client) ---→KafkaApis(Broker Core) - Action: Sends
TxnShareAcknowledgeRequestto Broker 5 (theSharePartitionleader - lets say it is broker 5). - Broker Execution:
KafkaApisintercepts the request and performs two background operations:- Resolves the state partition:
shareCoordinatorPartition = (__share_group_state, partitionFor(groupId)).
- Resolves the state partition:
Calls - Source Component:
- First call txnCoordinator.handleAddPartitionsToTransaction(transactionalId, producerId, producerEpoch, Set.of(shareCoordinatorPartition), callback, TV_2, requestLocal)
- Then callback → Calls
txnCoordinator.handleAddPartitionsToTransactionto dynamically register__share_group_state-Nin__transaction_state. - persists to
__transaction_stateviaTransactionLogValue:topicPartitions = {output-A-0, __share_group_state-N}
- Then callback → Calls
- First call txnCoordinator.handleAddPartitionsToTransaction(transactionalId, producerId, producerEpoch, Set.of(shareCoordinatorPartition), callback, TV_2, requestLocal)
- State Change:
TransactionMetadatanow tracks bothtopicPartitions = {output-A-0, __share_group_state-N}. - Staging Phase: Only on success,
SharePartitionManagerstages the transactional acknowledgements, transitioning the internalInFlightStatetoTX_PENDING.
- producer.commitTransaction()
- Source Component: Client ------->
TransactionCoordinator(Broker Core) - Action: Sends
EndTxnRequest(COMMIT). - Execution:
TxnCoordreads the topic partitions from state and resolves the physical leaders viaMetadataCache:output-A-0--------> Broker 3__share_group_state-N-----→ Broker 5
- Action: Dispatches
WriteTxnMarkersto both brokers.
- Source Component: Client ------->
- Each broker handles the transaction markers
- Execution on Broker 3 (Output Side):
- Appends the
COMMITcontrol batch to theoutput-A-0log. - KIP-1289 hook runs (no-op since no
TX_PENDINGhere)
- Appends the
- Execution on Broker 5 (Share Side):
- Appends the
COMMITcontrol batch to the__share_group_state-Nlog. - Fires the KIP-1289 hook: Triggers
sharePartitionManager.applyTxnMarker(COMMIT). - Scans the internal
partitionCache, finds the matchingTX_PENDINGflight states, and commits them toACKNOWLEDGED.
- Appends the
- Execution on Broker 3 (Output Side):
- Transaction Completion
- Action: Both brokers return successful ACKs back to
TxnCoord. - State Change:
TxnCoordtransitions the state toCOMPLETE_COMMIT. - Result: The client-side blocking
producer.commitTransaction()call returns successfully.
- Action: Both brokers return successful ACKs back to
[Note: Only TV 2 supporting - broker-side auto-registration and proper epoch fencing, do not want to maintain TV1 code. TV2 is already default option since 4.0]
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).
...