Kafka專題:5.kafka冪等傳送與事務

weixin_34253539發表於2019-02-08

kafka在0.11之後,開始支援冪等傳送和事務,那麼分別是如何實現的呢?

冪等傳送
引入producerid +seqnum的設計
對於每一個生產者,初始化是分配一個producerid,傳送訊息的時候會有一個單調遞增的seqnum,訊息包含producerid+ seqnum
對於broker,會快取一個最大的producerid+ seqnum,如果接收到訊息的seq小於之前快取的seq,直接返回冪等結果,不要寫入日誌檔案。 這個冪等只能在相同生產者session和相同partition級別保證,不同的生產者或者不同的partition保證不了。

事務
引入事務協調者,事務日誌,transactionid的設定
對於消費,轉換,寫入這樣的場景,將消費的offset 更新,和寫入的commit放在一個事務中,只有全部成功,消費的offset才會進行更新。否則,重新消費。
事務隔離級別,有read commited和read uncommited兩種。
對於read commited級別,consumer會過濾掉那些終止事務的訊息(比如寫入場景,有些寫入成功,有些寫入失敗)。

相關文章