MQ消息重復(fù)消費

1.消息重復(fù)消費

  • 場景:
    • 以Kafka舉例,生產(chǎn)者發(fā)送三條消息到Kafka,分別為:數(shù)據(jù)一(offset:1)、數(shù)據(jù)二(offset:2)、數(shù)據(jù)三(offset:3).消費者從mq中消費數(shù)據(jù),offset1的數(shù)據(jù)消費成功,數(shù)據(jù)保存到數(shù)據(jù)庫,消費者提交offset,通過zookeeper記錄當(dāng)前offset1已經(jīng)被消費,消費者繼續(xù)消費數(shù)據(jù)二,消費成功,數(shù)據(jù)保存到數(shù)據(jù)庫,消費者準(zhǔn)備提交offset2,此時消費者掛了,offset2沒有能提交,那么這個offset2沒有沒被zookeeper記錄已經(jīng)消費,當(dāng)程序重啟時,消費者繼續(xù)向mq消費數(shù)據(jù),此時Kafka從zookeeper獲取到上次最后消費的是offset1,那么mq會把offset1后面的數(shù)據(jù)發(fā)送給消費者,此時消費者消費到offset2數(shù)據(jù),這就造成數(shù)據(jù)重復(fù)消費.
  • 常用方案:
    • 1.通過唯一標(biāo)識,列如:Kafka的offset、MQ的Message ID、數(shù)據(jù)中有保證唯一字段,
    • 2.可以每次消費數(shù)據(jù)把唯一標(biāo)識存入redis,每次操作數(shù)據(jù)可以去redis校驗是否已經(jīng)存在;數(shù)據(jù)庫可以設(shè)計一張專門用來校驗數(shù)據(jù)的表,把唯一標(biāo)識存入數(shù)據(jù)庫,或者在當(dāng)前操作的數(shù)據(jù)庫表上多加一個唯一字段,用于存儲唯一字段,每次都通過數(shù)據(jù)庫校驗是否重復(fù)消費;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容