前面提到了,kafka0.11.0版本引入的冪等性只能保證分割槽級別的at-exactly-once語義
如圖,producer向三個分割槽分別生產10條資料,前兩個生產成功,寫第三個分割槽時,producer掛掉;producer重啟後,重新向三個分割槽寫入資料;
此時producer的pid變化,導致訊息重複,因此引入了事務,解決該問題
生產者事務
生產者建立時,設定全域性唯一的事務id --- transactionid;事務id與pid繫結,當producer重啟後,會根據事務id查詢pid,因此能夠保證全域性at-exactly-once語義
配置方法:transactional.id(注:使用事務的前提是必須開啟冪等性)
解決全域性精確唯一語義是kafka事務引入的初衷,但是後期又引入的新的功能:producer生產訊息的batch在乙個原子單元內完成;
也就是說:當前batch的訊息要麼全部生產成功,要麼全部失敗,並且故障恢復後,能夠保證事務id不變;
這裡需要提一下:事務id是由使用者指定的,而pid是生產者建立成功後,producer向kafka申請的;並且兩者為1:1關係
kafka學習筆記(二) 生產者介紹
生產者傳送訊息的過程 分割槽原則 資料可靠性保證 acsk 0 producer不等待broker的ack,這樣可以提供最低的延遲,broker一接收到還沒有寫入到磁碟就返回ack,當broker出現故障的時候可能會丟失資料 1 producer等待broker返回ack,partition的lea...
Kafka學習筆記(二) 生產者詳解
2 傳送原理刨析 3 其他生產者引數 訊息要到網路上進行傳輸,必須進行序列化,而序列號器的作用就是入磁。kafka提供了預設的字串序列化器 org.apache.kafka.common.serialization.stringserializer 還有整型 integerserializer 和位...
5 12 生產者和消費者
一 生產者和消費者之間的關係 1 生產者將生產出來的資訊不斷存入乙個區域內,消費者將資訊從該區域內不斷讀取出來 生產者錄入資訊 消費者讀取資訊 例 電影票 public class movie public void setname string name public string getinfo...