日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【消息队列】kafka是如何保证消息不被重复消费的

發(fā)布時(shí)間:2025/3/14 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【消息队列】kafka是如何保证消息不被重复消费的 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、kafka自帶的消費(fèi)機(jī)制

  kafka有個(gè)offset的概念,當(dāng)每個(gè)消息被寫進(jìn)去后,都有一個(gè)offset,代表他的序號(hào),然后consumer消費(fèi)該數(shù)據(jù)之后,隔一段時(shí)間,會(huì)把自己消費(fèi)過的消息的offset提交一下,代表我已經(jīng)消費(fèi)過了。下次我要是重啟,就會(huì)繼續(xù)從上次消費(fèi)到的offset來繼續(xù)消費(fèi)。

  但是當(dāng)我們直接kill進(jìn)程了,再重啟。這會(huì)導(dǎo)致consumer有些消息處理了,但是沒來得及提交offset。等重啟之后,少數(shù)消息就會(huì)再次消費(fèi)一次。

  其他MQ也會(huì)有這種重復(fù)消費(fèi)的問題,那么針對(duì)這種問題,我們需要從業(yè)務(wù)角度,考慮它的冪等性。

?

二、通過保證消息隊(duì)列消費(fèi)的冪等性來保證

  舉個(gè)例子,當(dāng)消費(fèi)一條消息時(shí)就往數(shù)據(jù)庫插入一條數(shù)據(jù)。如何保證重復(fù)消費(fèi)也插入一條數(shù)據(jù)呢?

  那么我們就需要從冪等性角度考慮了。冪等性,我通俗點(diǎn)說,就一個(gè)數(shù)據(jù),或者一個(gè)請(qǐng)求,無論來多次,對(duì)應(yīng)的數(shù)據(jù)都不會(huì)改變的,不能出錯(cuò)。

?

怎么保證消息隊(duì)列消費(fèi)的冪等性?

我們需要結(jié)合業(yè)務(wù)來思考,比如下面的例子:

  1.比如某個(gè)數(shù)據(jù)要寫庫,你先根據(jù)主鍵查一下,如果數(shù)據(jù)有了,就別插入了,update一下好吧

  2.比如你是寫redis,那沒問題了,反正每次都是set,天然冪等性

  3.對(duì)于消息,我們可以建個(gè)表(專門存儲(chǔ)消息消費(fèi)記錄)

    生產(chǎn)者,發(fā)送消息前判斷庫中是否有記錄(有記錄說明已發(fā)送),沒有記錄,先入庫,狀態(tài)為待消費(fèi),然后發(fā)送消息并把主鍵id帶上。

    消費(fèi)者,接收消息,通過主鍵ID查詢記錄表,判斷消息狀態(tài)是否已消費(fèi)。若沒消費(fèi)過,則處理消息,處理完后,更新消息記錄的狀態(tài)為已消費(fèi)。

?

轉(zhuǎn)載于:https://www.cnblogs.com/756623607-zhang/p/10506909.html

總結(jié)

以上是生活随笔為你收集整理的【消息队列】kafka是如何保证消息不被重复消费的的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。