kafka事務使用

2021-09-29 16:04:11 字數 730 閱讀 4670

kafka提供事務主要是為了實現精確一次處理語義(exactly-once semantics, eos)的,而eos是實現流處理系統正確性(correctness)的基石,故kafka事務被大量應用於kafka streams之中。不過使用者當然也能夠呼叫api實現自己的事務需求。

具體的場景包括:

1. producer端跨多分割槽的原子性寫入

2. consumer端讀取事務訊息

多分割槽原子性寫入保證producer傳送到多個分割槽的一批訊息要麼都成功要麼都失敗=>所謂的失敗是指對事務型consumer不可見;而consumer端讀取事務訊息主要由consumer端隔離級別體現,它類似於資料庫中隔離級別的概念,目前只是簡單分為:read_uncommitted和read_committed,其中後者指的是consumer只能讀取已成功提交事務的訊息(當然也包括非事務型producer生產的訊息)。目前kafka事務在consumer端很難像一般的資料庫那樣提供更高階的隔離級別(比如序列化或者snapshot),即事務型consumer能保證讀取到的訊息都是已提交事務的訊息,但不敢保證能夠讀取到所有這樣的訊息——有很多原因會導致這一點,比如compact topic使用新版本訊息覆蓋了之前的事務訊息或日誌段刪除導致部分資料不可讀等。

詳情:

關於sendoffsetstotransaction的疑問解決:

batis plus事務使用

service實現類 service transactional propagation propagation.nested,isolation isolation.default,readonly false,rollbackfor restexception.class 加在類上面,下面方法預...

java事務使用

在web.xml中開啟對事物註解的解析 在方法上加上事務註解,propagation屬性在說明在 這裡,rollbackfor指定方法丟擲什麼異常後自動回滾。transactional propagation propagation.required,rollbackfor runtimeexcep...

mysql事務使用

預設mysql開啟了自動提交,在執行insert,update,delete語句時候每一條sql語句就是乙個事務。檢視自動提交 show global variables like autocommit 關閉自動提交 set global autocommit 0 開啟 set global aut...