六 訊息佇列複習

來源:互聯網
上載者:User

標籤:actor   strong   不能   bubuko   重複   partition   info   叢集配置   message   

1 為什麼使用訊息佇列?

  六個字: 解耦、非同步、消峰。

2 使用訊息佇列有什麼缺點?

  訊息佇列掛了,系統就不能用了,系統可用性降低。

3 訊息佇列的高可用?

  kafka使用zookeeper,master/slave,保證高可用;

  Kafka通過Zookeeper管理叢集配置,選舉leader,以及在Consumer Group發生變化時進行rebalance

4 如何保證訊息不被重複消費(等冪性)?

  kafka有offset的概念,就是每一個訊息都有一個offset,kafka消費過訊息後,需要提交offset,讓訊息佇列知道自己已經消費過了;

  造成重複消費的原因:因為網路傳輸等等故障,確認資訊沒有傳送到訊息佇列,導致訊息佇列不知道自己已經消費過該訊息了,再次將該訊息分發給其他的消費者。如何避免:

  • insert操作,主鍵唯一性可以保證。
  • update, 不會有問題。
  • 其他情況下,可以用第三方工具做消費記錄(比如redis),給訊息分配全域ID。將<id,message>以K-V形式寫入redis。消費前,先去redis中查詢有沒有消費記錄。

5 如何保證消費的可靠性傳輸?

  我們在使用訊息佇列的過程中,應該做到訊息不能多消費,也不能少消費。    

     其實這個可靠性傳輸,每種MQ都要從三個角度來分析:生產者弄丟資料、訊息佇列弄丟資料、消費者弄丟資料

  (1)生產者弄丟資料:

    Producer在發布訊息到某個Partition時,先通過ZooKeeper找到該Partition的Leader,然後無論該Topic的Replication Factor為多少(也即該Partition有 多少個Replica),Producer只將該訊息發送到該Partition的Leader。Leader會將該訊息寫入其本地Log。每個Follower都從Leader中pull資料

    在kafka生產中,基本都有一個leader和多個follwer。follwer會去同步leader的資訊。

    因此,為了避免生產者丟資料,做如下兩點配置:

      1. 第一個配置要在producer端設定acks=all。這個配置保證了,follwer同步完成後,才認為訊息發送成功。

      2. 在producer端設定retries=MAX,一旦寫入失敗,這無限重試;

    (2) 訊息佇列丟資料:

    針對訊息佇列丟資料的情況,無外乎就是,資料還沒同步,leader就掛了,這時zookpeer會將其他的follwer切換為leader,那資料就丟失了。針對這種情況,應          該做兩個配置。

     1. replication.factor參數,這個值必須大於1,即要求每個partition必須有至少2個副本

     2. min.insync.replicas參數,這個值必須大於1,這個是要求一個leader至少感知到有至少一個follower還跟自己保持聯絡

          這兩個配置加上上面生產者的配置聯合起來用,基本可確保kafka不丟資料。

  (3)消費者弄丟資料:消費者丟資料一般是因為採用了自動確認訊息模式,至於解決方案,採用手動確認訊息即可。

6 如何保證訊息的順序性?

       針對這個問題,通過某種演算法,將需要保持先後順序的訊息放到同一個訊息佇列中(kafka中就是partition,rabbitMq中就是queue)。然後只用一個消費者去消費該隊列(kafka中,一個partition只能被一個consumer Group中的一個consumer消費)。

     

  

六 訊息佇列複習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.