訊息交付可靠性保證,即指kafka對producer和consumer要處理的資訊的保證。
最多一次:訊息可能會丟失,但絕對不會重複
至少一次:訊息不會丟失,但可能重複
精確一次:訊息不會丟失,也不會重**送
kafka預設對訊息的保證是至少一次
當然我們都希望精確一次。kafka同樣也提供了對精確一次的實現。主要有兩種分別是冪等生產者和事務型生產者
若開啟首先需要配置enable.idempotence = true,此時producer會變成冪等性producer。這個時候,當網路抖動,生產者沒有收到kafka返回的傳送成功響應,還是會再次傳送。但是kafka會根據訊息進行篩選,若具有相同字段值得訊息,則丟棄。
作用範圍
producer程序的一次執行,並且是單節點的
若啟用需要配置enable.idempotence=true
設定生產者的transactional.id
producer**需要顯示的使用事務的一些**
producer.inittransactions(); //初始化事務
try catch (kafkaexception e)
kafka即使回滾也會將訊息寫入到底層日誌中。因此consumer端若想讀取事務型的生產者,則需要配置isolation.level=read_committed,即只能看到事務型生產者的訊息和非事務性生產者的訊息 Kafka冪等性和事務
訊息交付可靠性保障 所謂的訊息交付可靠性保障,是指kafka對producer和consumer要處理的訊息提供什麼樣的承諾,常見三種如下 最多一次 at most once 訊息可能會丟失,但絕不會被重 送。只需要設定producer禁止重複即可。訊息要麼寫入成功,要麼寫入失敗,不會進行重試。至少...
kafka設計之冪等性和事務
http 1.1中對冪等性的定義是 一次和多次請求某乙個資源對於資源本身應該具有同樣的結果 網路超時等問題除外 也就是說,其任意多次執行對資源本身所產生的影響均與一次執行的影響相同 實現冪等的關鍵點就是服務端可以區分請求是否重複,過濾掉重複的請求。要區分請求是否重複的有兩點 唯一標識 要想區分請求是...
kafka同步生產者和非同步生產者深入剖析
什麼是kafka同步生產者,什麼是kafka非同步生產者?比如這裡某個topic有3個分割槽。kafka同步生產者 這個生產者寫一條訊息的時候,它就立馬傳送到某個分割槽去。kafka非同步生產者 這個生產者寫一條訊息的時候,先是寫到某個緩衝區,這個緩衝區裡的資料還沒寫到broker集群裡的某個分割槽...