日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、kafka主從同步與高可用

https://1028826685.iteye.com/blog/2354570
http://developer.51cto.com/art/201808/581538.htm

2、MQ有可能發生重復消費,如何避免,如何做到冪等

2.1 MQ消息發送


1、發送端MQ-client(消息生產者:Producer)將消息發送給MQ-server;

2、MQ-server將消息落地;

3、MQ-server回ACK給MQ-client(Producer);

4、MQ-server將消息發送給消息接受端MQ-client(消息消費者:Customer);

5、MQ-client(Customer)消費接受到消息后發送ACK給MQ-server;

6、MQ-server將落地消息刪除

2.2 消息重復發送原因

為了保證消息必達,MQ使用了消息超時、重傳、確認機制。使得消息可能被重復發送,如上圖中,由于網絡不可達原因:3和5中斷,可能導致消息重發。消息生產者a收不到MQ-server的ACK,重復向MQ-server發送消息。MQ-server收不到消息消費者c的ACK,重復向消息消費者c發消息。

2.3 消息重復發送產生的后果

舉個例子:購買會員卡,上游支付系統負責給用戶扣款,下游系統負責給用戶發卡,通過MQ異步通知。不管是上半場的ACK丟失,導致MQ收到重復的消息,還是下半場ACK丟失,導致購卡系統收到重復的購卡通知,都可能出現,上游扣了一次錢,下游發了多張卡。

2.4 MQ內部如何做到冪等性的

對于每條消息,MQ內部生成一個全局唯一、與業務無關的消息ID:inner-msg-id。當MQ-server接收到消息時,先根據inner-msg-id判斷消息是否重復發送,再決定是否將消息落地到DB中。這樣,有了這個inner-msg-id作為去重的依據就能保證一條消息只能一次落地到DB。

2.5 消息消費者應當如何做到冪等性

1、對于非冪等性業務且要求實現冪等性業務:生成一個唯一ID標記每一條消息,將消息處理成功和去重日志通過事務的形式寫入去重表。

2、對于非冪等性業務可不實現冪等性的業務:權衡去重所花的代價決定是否需要實現冪等性,如:購物會員卡成功,向用戶發送通知短信,發送一次或者多次影響不大。不做冪等性可以省掉寫去重日志的操作。

總結

以上是生活随笔為你收集整理的MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。