inittransactions()方法用來初始化事務;begintransaction()方法用來開啟事務;sendoffsetstotransaction()方法為消費者提供在事務內的位移提交的操作;committransaction()方法用來提交事務;aborttransaction()方法用來中止事務,類似於事務回滾。
在消費端有乙個引數isolation.level,與事務有著莫大的關聯,這個引數的預設值為「read_uncommitted」,意思是說消費端應用可以看到(消費到)未提交的事務,當然對於已提交的事務也是可見的。
這個引數還可以設定為「read_committed」,表示消費端應用不可以看到尚未提交的事務內的訊息。
舉個例子,如果生產者開啟事務並向某個分割槽值傳送3條訊息msg1、msg2和msg3,在執行committransaction()或aborttransaction()方法前,設定為「read_committed」的消費端應用是消費不到這些訊息的,不過在kafkaconsumer內部會快取這些訊息,直到生產者執行committransaction()方法之後它才能將這些訊息推送給消費端應用。反之,如果生產者執行了aborttransaction()方法,那麼kafkaconsumer會將這些快取的訊息丟棄而不推送給消費端應用。
日誌檔案中除了普通的訊息,還有一種訊息專門用來標誌乙個事務的結束,它就是控制訊息(controlbatch)。控制訊息一共有兩種型別:commit和abort,分別用來表徵事務已經成功提交或已經被成功中止。
recordbatch中attributes欄位的第6位用來標識當前訊息是否是控制訊息。如果是控制訊息,那麼這一位會置為1,否則會置為0,如上圖所示。
attributes欄位中的第5位用來標識當前訊息是否處於事務中,如果是事務中的訊息,那麼這一位置為1,否則置為0。由於控制訊息也處於事務中,所以attributes欄位的第5位和第6位都被置為1。
Kafka科普系列Kafka中的事務是什麼樣子的
inittransactions 方法用來初始化事務 begintransaction 方法用來開啟事務 sendoffsetstotransaction 方法為消費者提供在事務內的位移提交的操作 committransaction 方法用來提交事務 aborttransaction 方法用來中止事...
Kafka科普系列 什麼是LSO?
可能大家在使用kafka的時候並沒有太在意乙個消費端的引數 isolation.level,這個引數用來配置消費者的事務隔離級別。字串型別,有效值為 read uncommitted 和 read committed 表示消費者所消費到的位置,如果設定為 read committed 那麼消費者就會...
Kafka系列 Kafka核心概念
kafka系列文章 kafka系列 入門及應用場景 部署 簡單測試 bin kafka topics.sh create zookeeper 192.168.137.141 2181,192.168.137.142 2181,192.168.137.143 2181 kafka replicatio...