IT评测·应用市场-qidao123.com

标题: RocketMQ场景问题 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2025-1-5 15:37
标题: RocketMQ场景问题
1.消息丢失

   有这么一个场景,就是订单支付完成之后,订单系统会进行发送消息给RocketMQ集群,下游会有积分系统进行监听这个消息,进行消费然后给用户发放积分。在下面的这个场景中,通过查询日志发现了订单系统发送订单支付消息的日志。别的就没有了。

那我们进行分析
1. 发送订单支付消息给RocketMQ集群会出现消息丢失的情况的吗?
 会出现消息丢失的情况,大概出现的原因:在发送的过程中,出现了网络抖动,导致了消息没有发送的MQ的集群上;MQ集群收到了消息,但是在进行保存的时候,由于自身的一些bug或者其他原因导致数据没有存储上也是大概的等。
2.消息到达了MQ,MQ会自己导致数据丢失吗?
答案也是大概的,举个例子,我们发送消息到MQ集群上,此时消息还是在os cache中,还是没有写入到磁盘,此时Broker呆板发生了宕机,那么消息就会出现丢失的情况。
3.消息到达了MQ,而且MQ将数据写入了磁盘,数据还会丢失吗?
答案还是有大概的,比方说磁盘发生了故障,导致数据的丢失。
4.消费者拿到了消息,消息就不会丢失了吗?
答案还是有大概会丢失的,假如我们的消费者拿到了消息,此时还没有进行消费,此时系统会有自动提交offset的本事,自动提交了offset,同时咱们的消息者宕机了,那么再次重启之后,这条消息就会出现丢失的情况。
解决方案:
针对情况一:我们可以采用RocketMQ的事件消息机制来包管消息发送的可靠性。

步调一 都失败了,那就没须要进行更新订单状态可以直接返回了;
步调二失败了 此时就会有步调五算是一个赔偿机制来进行反查状态;
步调三失败了,会触发步调四进行RollBack;
步调四失败了此时就会有步调五算是一个赔偿机制来进行反查状态;
针对情况二,情况三:我们采用同步刷盘和Raft协议主从同步的策略
当我们的Broker接收到消息之后,会先写入到os cache中,此时还没写入到磁盘中,这个时候如果呆板宕机了,消息就会丢失了。需要将默认的刷盘机制由异步刷盘改为同步刷盘,同时采用Broker集群的策略,一个Master broker写入成功,一个slave broker写入成功才认为是写入成功。这样的话就算Master Broker宕机了,slave Broker上也有消息,不会出现消息的丢失的情况。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4