消息隊列

消息隊列的使用場景

  1. 異步處理,比如用戶註冊後需要發送註冊郵件或者註冊短信,可以將發送郵件消息放到消息隊列再異步去處理,用戶就不需要等到發送完才返回註冊響應,提高了響應速度。
  2. 應用解耦,比如訂單系統和庫存系統之間使用消息隊列進行解耦,避免了庫存系統故障而導致訂單也無法完成的嚴重錯誤。
  3. 流量削鋒,比如秒殺活動,大量用戶請求涌進,服務器接收後寫入消息隊列。假如消息隊列消息的長度超過最大數量,則直接拋棄用戶請求或者跳轉到錯誤頁面。業務部分再根據消息隊列中的請求做後續的處理。
  4. 消息通訊,比如實現點對點消息隊列,或者聊天室等。
  5. 日誌處理,比如Kafka,解決大量日誌傳輸的問題,日誌採集客戶端負責日誌的採集,定時寫入消息隊列;Kafka再負責日誌數據的接收、存儲和轉發。

消息的重發補償解決思路

消息的冪等性解決思路

消息的堆積解決思路

  • 增大批次:瓶頸在消費吞吐量的時候,增加批次也可以改善性能
  • 增加線程數:如果一些消費者組中的消費者線程還是有 1 個消費者線程消費多個分區的情況,建議增加消費者線程。儘量 1 個消費者線程對應 1 個分區,從而發揮現有分區數下的最大並行度。

自己如何實現消息隊列

如何保證消息的有序性

  • 拆分多個 queue,每個 queue 一個 consumer,就是多一些 queue 而已,確實是麻煩點;或者就一個 queue 但是對應一個 consumer,然後這個 consumer 內部用內存隊列做排隊,然後分發給底層不同的 worker 來處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章