<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          RabbitMQ和Kafka如何保證消息順序執(zhí)行?

          共 1345字,需瀏覽 3分鐘

           ·

          2021-03-14 00:23

          一、為什么要保證順序

          消息隊列中的若干消息如果是對同一個數(shù)據(jù)進行操作,這些操作具有前后的關(guān)系,必須要按前后的順序執(zhí)行,否則就會造成數(shù)據(jù)異常。

          例如,業(yè)務(wù)上產(chǎn)生三條消息,分別是對數(shù)據(jù)的增加、修改、刪除,而如果沒有保證順序消費,結(jié)果可能是刪除、修改、增加,本來數(shù)據(jù)最終要刪除、結(jié)果變成增加。

          二、RabbitMQ順序消費模式

          一個Queue,有多個Consumer去消費,這樣就會造成順序的錯誤,Consumer從MQ里面讀取數(shù)據(jù)是有序的,但是每個Consumer的執(zhí)行時間是不固定的,無法保證先讀到消息的Consumer一定先完成操作,這樣就會出現(xiàn)消息并沒有按照順序執(zhí)行,造成數(shù)據(jù)順序錯誤。


          解決方案:

          一個Queue對應一下Consumer,把需要保證順序的message都發(fā)送到一個Queue當中,關(guān)閉autoack,prefetchCount=1,每次只消費一條信息,處理過后進行手工ack,然后接收下一條message,只是由一個Consumer進行處理。

          多數(shù)業(yè)務(wù)場景下,可以做局部順序,創(chuàng)建多個隊列,同一業(yè)務(wù)id的消息發(fā)送到同一個消息隊列,這樣隊列數(shù)增加,消費者數(shù)量也會增加 了。

          拆分多個Queue,每個Queue一個Consumer,就是多一些Queue而已。


          首先,我們在 RabbitMQ 中會建立有相同前綴的隊列,后面跟著隊列編號。然后,集群中的不同應用會分別監(jiān)聽這兩個有著不同編號的隊列。當在 A 發(fā)送信息時,我們會對信息做一次簡單的哈希:

          m = hash(id) mod n

          這里,id 是訂單的標識。n 是集群中 B 所在業(yè)務(wù)系統(tǒng)部署的數(shù)量。最終的 m 是我們需要發(fā)送到的目的隊列編號。


          假設(shè),hash(id) 的結(jié)果為 2000,n 為 2,經(jīng)過計算 m = 0。此時,A 就會把他和 B 的對話信息都發(fā)送到 chat00 的隊列里。B 收到消息后,就會依次顯示給終端用戶。這樣,聊天亂序的問題就解決了。

          三、kafka順序消費模式

          具有順序的數(shù)據(jù)寫入到了不同的partition里面,不同的消費者去消費,但是每個consumer的執(zhí)行時間是不固定的,無法保證先讀到消息的consumer一定先完成操作,這樣就會出現(xiàn)消息并沒有按照順序執(zhí)行,造成數(shù)據(jù)順序錯誤。


          解決方案:

          確保順序消息發(fā)送到同一個partition,一個topic,一個partition,一個consumer,內(nèi)部單線程消費。




          來源:

          https://www.toutiao.com/i6936741307201274401/


          推薦閱讀:

          金三銀四跳槽,什么樣的Leader是好Leader

          企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

          華為內(nèi)網(wǎng)最火的文章:什么是內(nèi)卷?

          不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)

          華為內(nèi)部幾近滿分的項目管理PPT,牛逼了

          阿里達摩院《機器學習算法學習指南》火了,限時開放下載!

          小米用戶畫像實戰(zhàn),48頁PPT下載

          GO語言版《算法進階指南》火了,完整版PDF下載!

          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  西西4444www大胆艺术 | 精品少妇人妻AV无码专区在线 | 你懂的日韩欧美在线视频 | 操逼男女操逼 | 日本的一级黄色片 |