RocketMQ生产常见问题

RocketMQ如何保证消息不丢失

1、哪些环节会有丢消息的可能?

                

       其中,1,2,4三个场景都是跨网络的,而跨网络就肯定会有丢消息的可能。关于3这个环节,通常MQ存盘时都会先写入操作系统的缓存page cache中,然后再由操作系统异步的将消息写入硬盘。这个中间有个时间差,就可能会造成消息丢失。如果服务挂了,缓存中还没有来得及写入硬盘的消息就会丢失。

2、RocketMQ消息零丢失方案

生产者使用事务消息机制保证消息零丢失

1. 生产者使用事务消息机制保证消息零丢失。

        RocketMQ的事务消息机制,实际上只保证了整个事务消息的一半,他保证的是生产者将消息发送到broker保证事务一致性,而对下游服务的事务并没有保证。这种方式是分布式事务的一个很好的降级方案。

2. RocketMQ配置同步刷盘+Dledger主从架构保证MQ主从同步时不会丢消息

1、同步刷盘

       可以把RocketMQ的刷盘方式 flushDiskType配置成同步刷盘就可以保证消息在刷盘过程中不会丢失了。

2、Dledger的文件同步

              

       使用Dledger技术搭建的RocketMQ集群,Dledger会通过两阶段提交的方式保证文件在主从之间成功同步。

       Dledger是由开源组织OpenMessage带入到RocketMQ中的一种高可用集群方案。Dledger的主要作用有两个,一是进行Broker自动选主。二是接管Broker的CommitLog文件写入过程。将单机的文件写入,转为基于多数同意机制的分布式消息写入。基于Raft协议完成了两阶段的数据同步。

3. 消费者端不要使用异步消费机制

         正常情况下,消费者端都是需要先处理本地事务,然后再给MQ一个ACK响应,这时MQ就会修改Offset,将消息标记为已消费,从而不再往其他消费者推送消息。所以在Broker的这种重新推送机制下,消息是不会在传输过程中丢失的。

        如果异步消费的方式,就有可能造成消息状态返回后消费者本地业务逻辑处理失败造成消息丢失的可能。

4. RocketMQ特有的问题,NameServer挂了如何保证消息不丢失?

        如果集群中所有的NameServer节点都挂了,生产者和消费者是立即就无法工作了的。在这种情况下,RocketMQ相当于整个服务都不可用了,那他本身肯定无法给我们保证消息不丢失了。

        如果多次尝试发送RocketMQ不成功,可以考虑给(Redis、文件或者内存等)把数据消息缓存下来,然后起一个线程定时的扫描这些失败消息,尝试往RocketMQ发送。这样等RocketMQ的服务恢复过来后,就能第一时间把这些消息重新发送出去。

RocketMQ消息零丢失方案总结

1. 生产者使用事务消息机制。

2. Broker配置同步刷盘+Dledger主从架构。

3. 消费者不要使用异步消费。

4. 整个MQ挂了之后准备降级方案。


使用RocketMQ如何快速处理积压消息?

1、如何确定RocketMQ有大量的消息积压?

        对于RocketMQ来说,有个最简单的方式来确定消息是否有积压。那就是使用web控制台,就能直接看到消息的积压情况。在Web控制台的主题页面,可以通过 Consumer管理 按钮实时看到消息的积压情况。也可以通过mqadmin指令在后台检查各个Topic的消息延迟情况。

2、如何处理大量积压的消息?

       如果消息不是很重要,那么RocketMQ的管理控制台就直接提供了跳过堆积的功能。

       如果Topic下的MessageQueue配置得是足够多的,那每个Consumer实际上会分配多个MessageQueue来进行消费。这个时候,就可以简单的通过增加Consumer的服务节点数量来加快消息的消费,等积压消息消费完了,再恢复成正常情况。最极限的情况是把Consumer的节点个数设置成跟MessageQueue的个数相同。但是如果此时再继续增加Consumer的服务节点就没有用了。

       如果Topic下的MessageQueue配置得不够多的话,如果要快速处理积压的消息,可以创建一个新的Topic,配置足够多的MessageQueue。然后把所有消费者节点的目标Topic转向新的Topic,并紧急上线一组新的消费者,只负责消费旧Topic中的消息,并转储到新的Topic中,这个速度是可以很快的。然后在新的Topic上,就可以通过增加消费者个数来提高消费速度了。之后再根据情况恢复成正常情况。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. RocketMQ的架构是怎样的? RocketMQ的架构主要包括Producer、Broker、Consumer三个组件,其中Producer负责消息生产,Broker负责消息的存储和转发,Consumer负责消息的消费。 2. 如何保证消息的可靠性? RocketMQ采用了多种方式保证消息的可靠性,比如消息的持久化存储、消息的冗余备份、消息的重试机制、消息的顺序保证等。 3. RocketMQ消息模型有哪些? RocketMQ消息模型主要分为点对点模型和发布订阅模型两种。点对点模型中一个消息只能被一个消费者消费,发布订阅模型中一个消息可以被多个消费者消费。 4. RocketMQ消息存储方式是怎样的? RocketMQ消息存储方式采用了基于文件的存储方式,将消息存储在磁盘上,同时采用了内存映射的方式提高读写效率。 5. RocketMQ消息发送流程是怎样的? RocketMQ消息发送流程主要包括消息生产消息的发送、消息的存储和消息的消费四个步骤。其中消息生产和消费由应用程序完成,消息的发送和存储由RocketMQ的Broker完成。 6. 如何保证消息的顺序性? RocketMQ可以通过设置消息的顺序关键字和消息的队列选择策略来保证消息的顺序性,保证同一个顺序关键字的消息只会被同一个消费者消费,从而保证消息的顺序性。 7. 如何保证消息的高可用性? RocketMQ可以通过Broker的冗余备份、Master-Slave模式、自动故障转移等方式保证消息的高可用性,从而保证系统的稳定性和可靠性。 8. RocketMQ消息堆积如何处理? RocketMQ可以通过设置消息的存储时间、消息的过期时间、消息的重试机制等方式避免消息的堆积问题,从而保证系统的正常运行。同时也可以通过监控系统对消息的堆积情况进行实时监控和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值