精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MQ的數據一致性,如何保證?

開發 架構
在消費者端消費消息時,如果消費失敗次數,達到重試上限后進入死信隊列。這個方案救了社交系統的推送服務——通過DLX收集全部異常消息,凌晨用補償Job重跑。

前言

上個月,我們有個電商系統出了個靈異事件:用戶支付成功了,但訂單狀態死活不改成“已發貨”。

折騰了半天才定位到問題:訂單服務的MQ消息,像人間蒸發一樣消失了。

這個Bug讓我明白:(MQ)消息隊列的數據一致性設計,絕對能排進分布式系統三大噩夢之一!

今天這篇文章跟大家一起聊聊,MQ如何保證數據一致性?希望對你會有所幫助。

1.數據一致性問題的原因

這些年在Kafka、RabbitMQ、RocketMQ踩過的坑,總結成四類致命原因:

  • 生產者悲劇:消息成功進Broker,卻沒寫入磁盤就斷電。
  • 消費者悲劇:消息消費成功,但業務執行失敗。
  • 輪盤賭局:網絡抖動導致消息重復投遞。
  • 數據孤島:數據庫和消息狀態割裂(下完單沒發券)

這些情況,都會導致MQ產生數據不一致的問題。

那么,如何解決這些問題呢?

2.消息不丟的方案

我們首先需要解決消息丟失的問題。

2.1 事務消息的兩階段提交

以RocketMQ的事務消息為例,工作原理就像雙11的預售定金偽代碼如下:

// 發送事務消息核心代碼
TransactionMQProducer producer = new TransactionMQProducer("group");
producer.setTransactionListener(new TransactionListener() {
    // 執行本地事務(比如扣庫存)
    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
        return doBiz() ? LocalTransactionState.COMMIT : LocalTransactionState.ROLLBACK;
    }

    // Broker回調檢查本地事務狀態
    public LocalTransactionState checkLocalTransaction(MessageExt msg) {
        return checkDB(msg.getTransactionId()) ? COMMIT : ROLLBACK;
    }
});

真實場景中,別忘了在checkLocalTransaction里做好妥協查詢(查流水表或分布式事務日志)。

去年在物流系統救火,就遇到過事務超時的坑——本地事務成功了,但因網絡問題沒收到Commit,導致Broker不斷回查。

2.2 持久化配置

RabbitMQ的坑都在配置表里:

配置項

例子

作用

隊列持久化

durable=true

隊列元數據不丟

消息持久化

deliveryMode=2

消息存入磁盤

Lazy Queue

x-queue-mode=lazy

消息直接寫盤不讀取進內存

Confirm機制

publisher-confirm-type

生產者確認消息投遞成功

RabbitMQ本地存儲+備份交換機雙重保護代碼如下:

channel.queueDeclare("order_queue", true, false, false, 
    new HashMap<String, Object>(){{
        put("x-dead-letter-exchange", "dlx_exchange"); // 死信交換機
    }});

去年雙十一訂單系統就靠這個組合拳硬剛流量峰值:主隊列消息積壓觸發閾值時,自動轉移消息到備份隊列給應急服務處理。

2.3 副本配置

消息隊列

保命絕招

Kafka

acks=all + 副本數≥3

RocketMQ

同步刷盤 + 主從同步策略

Pulsar

BookKeeper多副本存儲

上周幫一個金融系統遷移到Kafka,為了數據安全啟用了最高配置。

server.properties配置如下:

acks=all
min.insync.replicas=2
unclean.leader.election.enable=false

結果發現吞吐量只剩原來的三分之一,但客戶說“錢比速度重要”——這一行哪有銀彈,全是取舍。

不同的業務場景,情況不一樣。

3.應對重復消費的方案

接下來,需要解決消息的重復消費問題。

3.1 唯一ID

訂單系統的架構課代表代碼:

// 雪花算法生成全局唯一ID
Snowflake snowflake = new Snowflake(datacenterId, machineId);
String bizId = "ORDER_" + snowflake.nextId();

// 查重邏輯(Redis原子操作)
String key = "msg:" + bizId;
if(redis.setnx(key, "1")) {
    redis.expire(key, 72 * 3600);
    processMsg();
}

先使用雪花算法生成全局唯一ID,然后使用Redis的setnx命令加分布式鎖,來保證請求的唯一性。

某次促銷活動因Redis集群抖動,導致重復扣款。

后來改用:本地布隆過濾器+分布式Redis 雙校驗,總算解決這個世紀難題。

3.2 冪等設計

針對不同業務場景的三種對策:

場景

代碼示例

關鍵點

強一致性

SELECT FOR UPDATE先查后更新

數據庫行鎖

最終一致性

版本號控制(類似CAS)

樂觀鎖重試3次

補償型事務

設計反向操作(如退款、庫存回滾)

操作日志必須落庫

去年重構用戶積分系統時,就靠著這個三板斧把錯誤率從0.1%降到了0.001%:

積分變更冪等示例如下:

public void addPoints(String userId, String orderId, Long points) {
    if (pointLogDao.exists(orderId)) return;
    
    User user = userDao.selectForUpdate(userId); // 悲觀鎖
    user.setPoints(user.getPoints() + points);
    userDao.update(user);
    pointLogDao.insert(new PointLog(orderId)); // 冪等日志
}

這里使用了數據庫行鎖實現的冪等性。

3.3 死信隊列

RabbitMQ的終極保命配置如下:

// 消費者設置手動ACK
channel.basicConsume(queue, false, deliverCallback, cancelCallback);

// 達到重試上限后進入死信隊列
public void process(Message msg) {
    try {
        doBiz();
        channel.basicAck(deliveryTag);
    } catch(Exception e) {
        if(retryCount < 3) {
            channel.basicNack(deliveryTag, false, true);
        } else {
            channel.basicNack(deliveryTag, false, false); // 進入DLX
        }
    }
}

消費者端手動ACK消息。

在消費者端消費消息時,如果消費失敗次數,達到重試上限后進入死信隊列。

這個方案救了社交系統的推送服務——通過DLX收集全部異常消息,凌晨用補償Job重跑。

4.系統架構設計

接下來,從系統架構設計的角度,聊聊MQ要如何保證數據一致性?

4.1 生產者端

對于實效性要求不太高的業務場景,可以使用:本地事務表+定時任務掃描的補償方案。

流程圖如下:

圖片圖片

4.2 消費者端

消費者端為了防止消息風暴,要設置合理的并發消費線程數。

流程圖如下:

圖片圖片

4.3 終極方案

對于實時性要求比較高的業務場景,可以使用 事務消息+本地事件表 的黃金組合.

流程圖如下:

圖片圖片

5.血淚經驗十條

  1. 消息必加唯一業務ID(別用MQ自帶的ID)
  2. 消費邏輯一定要冪等(重復消費是必然事件)
  3. 數據庫事務和消息發送必須二選一(或者用事務消息)
  4. 消費者線程數不要超過分區數*2(Kafka的教訓)
  5. 死信隊列必須加監控報警(別等客服找你)
  6. 測試環境一定要模擬網絡抖動(chaos engineering)
  7. 消息體要兼容版本號(血的教訓警告)
  8. 不要用消息隊列做業務主流程(它只配當輔助)
  9. 消費者offset定時存庫(防止重平衡丟消息)
  10. 業務指標和MQ監控要聯動(比如訂單量和消息量的波動要同步)

總結

(MQ)消息隊列像金融系統的SWIFT結算網絡,看似簡單實則處處殺機。

真正的高手不僅要會調參,更要設計出能兼容可靠性與性能的架構。

記住,分布式系統的數據一致性不是銀彈,而是通過層層防御達成的動態平衡。

就像當年我在做資金結算系統時,老板說的那句震耳發聵的話:“寧可慢十秒,不可錯一分”。

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2024-12-26 15:01:29

2023-09-07 08:11:24

Redis管道機制

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2021-12-14 07:15:57

MySQLRedis數據

2024-01-22 08:52:00

AQS雙異步數據一致性

2024-07-04 12:36:50

2023-09-15 14:24:54

ByteHouseClickHouse開源

2022-08-23 07:46:45

數據一致性數據庫

2019-08-30 12:46:10

并發扣款查詢SQL

2022-12-05 08:24:32

mongodb數據庫數據

2022-10-19 12:22:53

并發扣款一致性

2023-12-11 12:27:31

并發Zookeeper數據

2022-02-17 21:04:27

數據庫MysqlRedis

2018-08-14 10:39:04

數據錯誤DIX

2021-03-04 06:49:53

RocketMQ事務

2022-09-15 10:37:46

MySQLRedis數據一致性

2025-04-27 08:52:21

Redis數據庫緩存

2020-08-05 08:46:10

NFS網絡文件系統

2021-12-05 21:06:27

軟件
點贊
收藏

51CTO技術棧公眾號

亚洲国产中文字幕久久网| 亚洲欧美成人一区二区三区| 日本免费久久高清视频| 娇妻被老王脔到高潮失禁视频| 狂野欧美性猛交xxxx| 亚洲精品免费在线观看| 久久av免费一区| 中文字幕一区2区3区| 欧美va天堂| 亚洲性视频网站| 熟女人妻一区二区三区免费看| 伊人久久视频| 一区二区三区在线免费视频| 欧美日韩精品免费观看| 国产成人精品毛片| 久久综合网络一区二区| 欧美乱大交xxxxx| 少妇久久久久久久久久| 一区三区自拍| 欧美日韩在线三区| 黄色一级视频片| 免费网站免费进入在线| 99精品欧美一区| 91在线视频成人| 无码人妻丰满熟妇区五十路| 国产精品va| www.欧美三级电影.com| 精品人妻一区二区三区视频| 香港久久久电影| 欧美三级日韩三级国产三级| 国产欧美在线一区| 国产探花在线观看| 亚洲人成影院在线观看| 亚洲高清不卡一区| 欧美日本网站| 99国产精品视频免费观看| 亚洲综合精品伊人久久| 亚洲一级av毛片| 水蜜桃久久夜色精品一区的特点 | 欧美激情 亚洲| 深夜日韩欧美| 欧美视频一区二| 欧美激情成人网| 国产高清不卡| 欧美午夜久久久| 欧美精品久久久久久久免费| 欧美一卡二卡| 亚洲制服欧美中文字幕中文字幕| 欧美性受xxxx黑人猛交88| av福利精品| 国产精品午夜免费| 亚欧精品在线| 在线视频二区| 中文字幕一区日韩精品欧美| 日韩视频在线播放| 成年人视频在线看| 国产欧美日韩不卡免费| 婷婷亚洲婷婷综合色香五月| 91在线视频| 欧美国产乱子伦 | 狠狠操狠狠色综合网| 久久久久免费看黄a片app| 嗯~啊~轻一点视频日本在线观看| 夜夜嗨av一区二区三区四季av| 日本天堂免费a| 国产99re66在线视频| 亚洲第一在线综合网站| 欧美日韩二三区| 色婷婷综合久久久中字幕精品久久| 色婷婷精品久久二区二区蜜臀av| 午夜激情福利在线| 国产日韩在线观看视频 | 国产中文在线观看| 中文字幕不卡在线播放| 国产精品久久成人免费观看| 污污网站在线观看| 精品国产乱码久久久久久婷婷| 国产精品动漫网站| 狠狠久久综合| 日韩精品一区二区三区在线观看| 无码国产69精品久久久久网站| 亚洲区小说区| 日韩在线观看精品| 久久久久久久久久一区二区三区| 亚洲国产国产亚洲一二三| 4444欧美成人kkkk| 一级黄色免费片| 成人av手机在线观看| 欧美一级二级三级| 91网在线看| 色香蕉久久蜜桃| 韩国三级丰满少妇高潮| 天堂成人娱乐在线视频免费播放网站 | 中国特级黄色片| 欧美三级自拍| 色香阁99久久精品久久久| 免费在线观看黄色av| 视频一区二区三区中文字幕| 91在线观看免费高清| 亚洲 美腿 欧美 偷拍| 中文字幕一区在线| 亚洲 高清 成人 动漫| 亚洲日韩中文字幕一区| 亚洲国产成人精品一区二区| 国产在线观看免费视频软件| 亚洲香蕉网站| 国产日韩欧美中文| 三级在线播放| 一区二区三区在线不卡| 午夜免费一区二区| 国产成人tv| 久久久精品免费视频| av手机天堂网| 成人97人人超碰人人99| 亚洲午夜精品一区二区三区| 中老年在线免费视频| 日韩一区二区在线观看| 我不卡一区二区| 妖精视频成人观看www| 亚洲一区二区三区xxx视频| 国产永久av在线| 午夜视频在线观看一区二区| 午夜免费视频网站| 日韩欧美视频在线播放| 日本aⅴ大伊香蕉精品视频| 成人毛片视频免费看| 亚洲私人黄色宅男| 国产又大又黄又猛| 精品99久久| 欧洲亚洲妇女av| 色欲av伊人久久大香线蕉影院| 亚洲免费大片在线观看| 日本中文字幕精品—区二区| 久久av免费| 26uuu国产精品视频| 无码国精品一区二区免费蜜桃| 一区二区三区四区视频精品免费| 加勒比av中文字幕| 99久久.com| 国产精品中文字幕久久久| 韩国免费在线视频| 色先锋aa成人| 精品无码人妻一区二区免费蜜桃| 模特精品在线| 欧美连裤袜在线视频| 桃色av一区二区| 亚洲精品一二区| 亚洲天堂一区在线| 26uuu成人网一区二区三区| 午夜精品久久久久久久无码| 日本在线中文字幕一区| 国产91对白在线播放| 亚洲 小说区 图片区 都市| 欧美视频国产精品| 四虎永久免费在线观看| 日韩制服丝袜先锋影音| 亚洲精品第一区二区三区| 99精品在免费线偷拍| 日韩中文字幕在线播放| 一级全黄裸体免费视频| 亚洲欧美日本在线| 97精品人人妻人人| 亚洲综合不卡| 亚洲国产一区二区精品视频| 四虎国产精品免费久久| 免费不卡欧美自拍视频| 亚洲精品久久久久avwww潮水| 亚洲一区二区三区在线看| 朝桐光av一区二区三区| 日韩有码一区二区三区| 一区二区三区国产福利| 久久69av| 91成人国产在线观看| jizz日韩| 日韩精品一区二区三区视频播放| 日韩毛片在线播放| 国产人成一区二区三区影院| 色婷婷激情视频| 在线日本成人| 日韩免费电影一区二区三区| 国产区一区二| 欧洲精品毛片网站| 成人在线app| 日韩久久午夜影院| 国产精品视频久久久久久| 婷婷中文字幕一区三区| 一区二区三区在线观看免费视频| 国产成人自拍网| 欧美韩国日本在线| 亚洲欧美在线专区| 久久久久久国产精品免费免费| 先锋影音网一区二区| 国模视频一区二区| 99reav在线| 亚洲精品福利视频| 国产精品久久久久毛片| 欧美视频裸体精品| 欧美色图亚洲天堂| 国产欧美一区二区精品仙草咪| 国产精品熟妇一区二区三区四区| 日韩精品成人一区二区三区 | jizzjizz亚洲| 亚洲欧美国产精品专区久久 | 国产第一页在线观看| 亚洲久本草在线中文字幕| 毛片网站免费观看| 国产成人高清在线| 亚洲欧美自偷自拍另类| 国产精品久久久免费| 日本三级中文字幕在线观看| 国产精品嫩模av在线| 国产98在线|日韩| 视频91a欧美| 国产成人免费av| 成年人国产在线观看| 久久夜色精品国产亚洲aⅴ| 国产系列在线观看| 亚洲国产精品电影在线观看| www国产一区| 欧美精品日韩一本| 中文字幕乱码人妻二区三区| 日韩欧美在线字幕| 中国一级免费毛片| 性做久久久久久久免费看| 欧美成人一二三区| 国产精品第五页| 黄色三级生活片| 久久久久国产精品厨房| 一起草在线视频| 成熟亚洲日本毛茸茸凸凹| 日韩av福利在线观看| 精品影视av免费| 欧美日韩一区二区三区69堂| 日日夜夜一区二区| 无码无遮挡又大又爽又黄的视频| 日韩视频一区| 岛国大片在线播放| 亚洲视频福利| 日本一区午夜艳熟免费| 激情国产一区| 波多野结衣与黑人| 欧美久久久久| 欧美高清中文字幕| 国模一区二区三区| 亚洲人成无码网站久久99热国产 | 亚洲午夜私人影院| 国产第一页在线播放| 亚洲国产一区二区三区| 日本一区二区网站| 婷婷久久综合九色综合绿巨人 | 久久久久久高清| 九九在线精品| 日韩国产高清一区| 第一会所sis001亚洲| 亚洲精品一区二区三区樱花| 久久影视一区| 日本道在线视频| 国产精品99免费看| 毛片在线播放视频| 丝袜美腿高跟呻吟高潮一区| 一本色道久久亚洲综合精品蜜桃| 九一久久久久久| 国产麻豆剧传媒精品国产| 成人av资源站| 精品人妻无码一区二区三区 | 亚洲高清视频一区二区| 99久久夜色精品国产亚洲狼 | 成人性视频免费看| 综合av第一页| 国产精品suv一区二区| 欧美日韩在线一区| 中文字幕永久在线观看| 欧美一区二区三区影视| 秋霞欧美在线观看| 在线观看国产成人av片| 超碰免费公开在线| 5252色成人免费视频| 久久天天久久| 国产一区二区免费在线观看| 欧美精品系列| 美女av免费观看| 久久一区欧美| 国产又粗又猛大又黄又爽| 91日韩精品一区| 国产精品18在线| 亚洲国产另类av| 丰满人妻一区二区三区四区| 欧美本精品男人aⅴ天堂| 欧美91精品久久久久国产性生爱| 久久久极品av| 亚洲欧美韩国| dy888夜精品国产专区| 久久99国产成人小视频| av日韩在线看| 日本午夜精品一区二区三区电影 | 日本一区二区综合亚洲| 欧美极品aaaaabbbbb| 91久久精品一区二区| 丰满人妻一区二区三区免费视频| 在线观看欧美视频| a√中文在线观看| 亚洲综合小说区| 青草国产精品| 青青青国产在线观看| 国产最新精品免费| 极品人妻videosss人妻| 亚洲国产精品一区二区久久恐怖片| 中文字幕欧美人妻精品| 精品偷拍各种wc美女嘘嘘| 韩国av网站在线| 国产精品爽爽爽爽爽爽在线观看| 天堂资源在线亚洲| 精品无码国产一区二区三区av| 韩国女主播成人在线| 人妻精品久久久久中文| 偷拍亚洲欧洲综合| 亚洲精品成av人片天堂无码| 日韩在线www| 成人黄色在线| 日本一区二区三区在线视频| 99国产精品99久久久久久粉嫩| 在线视频观看一区二区| 中文字幕av一区二区三区高| 黄色片网站在线免费观看| 亚洲国产欧美自拍| 搞黄网站在线看| 国产精品久久亚洲7777| 欧美精品一区二区三区久久久竹菊| 超碰超碰在线观看| 国产精品麻豆久久久| 九九热最新视频| 亚洲视频欧洲视频| 欧美大片高清| 欧美一区亚洲二区| 中文久久精品| 深爱五月激情网| 日韩欧美一区二区三区| 欧美午夜黄色| 欧美在线免费看| 啄木系列成人av电影| 国产成人亚洲精品无码h在线| 久久久综合激的五月天| 日本中文字幕久久| 亚洲全黄一级网站| 成人做爰免费视频免费看| 天堂精品视频| 六月丁香婷婷色狠狠久久| 国产精品视频看看| 337p亚洲精品色噜噜狠狠| 91精品久久久久久粉嫩| 91久久爱成人| 夜夜精品视频| 蜜臀久久99精品久久久久久| 欧美色偷偷大香| 精品欧美色视频网站在线观看| 91热精品视频| 亚洲二区免费| 欧美做受xxxxxⅹ性视频| 欧洲精品一区二区三区在线观看| 日本蜜桃在线观看| 亚洲va欧美va国产综合剧情| 欧美午夜不卡| 欧美深性狂猛ⅹxxx深喉| 一本色道亚洲精品aⅴ| 在线看av的网址| 91中文字幕在线观看| 精品不卡视频| 真实乱视频国产免费观看| 欧美日韩精品免费观看视频| 大片免费在线观看| 精品免费二区三区三区高中清不卡 | 久久精品免费在线观看| 一级日韩一级欧美| 国模极品一区二区三区| 区一区二视频| 成人在线观看一区二区| 一本到不卡免费一区二区| 精品国产99久久久久久| 国产精品裸体一区二区三区| 久久综合中文| 九九热这里有精品视频| 亚洲人成电影在线| 久久久久久久久成人| 国产素人在线观看| 国产精品嫩草久久久久| 黄色一级a毛片| 国产成人精品久久久| 午夜精品影院| 好吊视频在线观看| 日韩欧美一区中文| 另类中文字幕国产精品| 欧美一区二区三区综合| 久久久不卡网国产精品二区| 国产黄色片网站| 国产精品久久久久高潮| 国内久久视频| 少妇视频一区二区| 日韩精品视频在线播放| 麻豆久久一区| 亚洲欧美自拍另类日韩|