Kafka 事務(wù)的實(shí)現(xiàn)原理

- 前言 -

- 事務(wù)流程 -


- 尋找 TC 服務(wù)地址 -

- 事務(wù)初始化 -

- 發(fā)送消息 -

- 發(fā)送提交請(qǐng)求 -
提交請(qǐng)求持久化
發(fā)送事務(wù)結(jié)果信息給分區(qū)

- 客戶端原理 -
使用示例:
1 | // 創(chuàng)建 Producer 實(shí)例,并且指定 transaction id |

- 運(yùn)行原理 -
1 | private enum State { |

- 服務(wù)端原理 -
1 | class TransactionMetadata( |

- 高可用分析 -
TC 服務(wù)
消息持久化
超時(shí)處理
源碼分析

- 客戶端 -
1 | public interface Producer<K, V> extends Closeable { |
1 | public synchronized TransactionalRequestResult initializeTransactions() { |
1 | private class InitProducerIdHandler extends TxnRequestHandler { |
1 | public synchronized void beginTransaction() { |
1 | public class KafkaProducer<K, V> implements Producer<K, V> { |
1 | public class TransactionManager { |
TransactionManager 的 addPartitionsToTransactionHandler 方法,會(huì)生成分區(qū)上傳請(qǐng)求,然后由Sender發(fā)送。
1 | public class TransactionManager { |
AddPartitionsToTxnHandler 負(fù)責(zé)處理響應(yīng)。
1 | private class AddPartitionsToTxnHandler extends TxnRequestHandler { |
1 | public class TransactionManager { |
AddOffsetsToTxnHandler 類負(fù)責(zé)處理響應(yīng),它的處理邏輯很簡(jiǎn)單,它收到響應(yīng)后,會(huì)發(fā)送 TxnOffsetCommitRequest 請(qǐng)求給 TC 服務(wù)。
1 | public synchronized TransactionalRequestResult beginCommit() { |
1 | private synchronized void completeTransaction() { |

- 服務(wù)端 -
1 | class TransactionStateManager(...) { |
1 | class TransactionStateManager { |
1 | def handleEndTransaction(transactionalId: String, |
1 | private[transaction] class DelayedTxnMarker(txnMetadata: TransactionMetadata, |
1 | def addTxnMarkersToSend(transactionalId: String, |
作者:zhmin
來(lái)源:
zhmin.github.io/2019/05/20/kafka-transaction/

評(píng)論
圖片
表情
