您好,登錄后才能下訂單哦!
at last once:至少消費一次(對一條消息有可能多次消費,有可能會造成重復消費數據)
原因:Proudcer產生數據的時候,已經寫入在broker中,但是由于broker的網絡異常,沒有返回ACK,這時Producer,認為數據沒有寫入成功,此時producer會再次寫入,相當于一條數據,被寫入了多次。
at most once:最多消費一次,對于消息,有可能消費一次,有可能一次也消費不了
原因:producer在產生數據的時候,有可能寫數據的時候不成功,此時broker就跳過這個消息,那么這條數據就會丟失,導致consumer無法消費。
exactly once:有且僅有一次。這種情況是我們所需要的,也就是精準消費一次。
at last once:可以先讀取數據,處理數據,最后記錄offset,當然如果在記錄offset之前就crash,新的consumer會重復的來消費這條數據,導致了”最少一次“
at most once:可以先讀取數據,然后記錄offset,最后在處理數據,這個方式,就有可能在offset后,還沒有及時的處理數據,就crash了,導致了新的consumer繼續從這個offset處理,那么剛剛還沒來得及處理的數據,就永遠不會被處理,導致了”最多消費一次“
exactly once:可以通過將提交分成兩個階段來解決:保存了offset后提交一次,消息處理成功后,再提交一次。
A:Producer 端寫入數據的時候保證冪等性操作:
冪等性:對于同一個數據無論操作多少次都只寫入一條數據,如果重復寫入,則執行不成功
B:broker寫入數據的時候,保證原子性操作, 要么寫入成功,要么寫入失敗。(不成功不斷進行重試)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。