知识整理(六):RocketMQ 相关知识

一、RocketMQ相关知识


1. 为什么要用消息队列?

   答:异步解耦削峰

2. RocketMQ如何解决重复消费消息问题?

   答:保证幂等性

   什么是幂等性?

   答:多次执行的结果始终一致。也就是说,相同的接口,无论你调1次还是100次,结果都是完全一致的。

3. RocketMQ如何解决顺序消费消息问题?

   答:一致性Hash(Hash取模法)。就是让一类请求(同一个订单)落在同一个队列上。单个队列天生支持顺序消费,如下图:
知识整理(六):RocketMQ 相关知识_第1张图片

4. RocketMQ如何解决分布式事务问题?

   答:事务反查机制。
知识整理(六):RocketMQ 相关知识_第2张图片
   消息队列中的分布式事务是——本地事务和存储消息到消息队列才是同一个事务。这样也就产生了事务的最终一致性,因为整个过程是异步的,每个系统只要保证它自己那一部分的事务就行了。

5. 什么是回溯消费?

   答:重新消费已经消费过的消息。

   重新消费一般是按照时间维度,例如由于 Consumer 系统故障,恢复后需要重新消费1小时前的数据。RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒。

6. RocketMQ持久化机制

   答:分为单节点集群两种情况。

   单节点 - 持久化方式同步刷盘异步刷盘
知识整理(六):RocketMQ 相关知识_第3张图片
   如上图所示,在同步刷盘中需要等待一个刷盘成功的 ACK ,同步刷盘对 MQ 消息可靠性来说是一种不错的保障,但是 性能上会有较大影响 ,一般地适用于金融等特定业务场景

   而异步刷盘往往是开启一个线程去异步地执行刷盘操作。消息刷盘采用后台异步线程提交的方式进行, 降低了读写延迟 ,提高了 MQ 的性能和吞吐量,一般适用于如发验证码等对于消息保证要求不太高的业务场景

   一般地,异步刷盘只有在 Broker 意外宕机的时候会丢失部分数据,你可以设置 Broker 的参数 FlushDiskType 来调整你的刷盘策略(ASYNC_FLUSH 或者 SYNC_FLUSH)。

   RocketMQ默认采用异步刷盘策略

   集群 - 持久化方式:上面的同步刷盘和异步刷盘是在单个结点层面的,而同步复制异步复制主要是指的 Borker 主从模式下,主节点返回消息给客户端的时候是否需要同步从节点。

  • 同步复制:也叫“主从双写”,指只有将消息写入到主节点和从节点才算写入成功
  • 异步复制:将消息写入到主节点就算写入成功。

你可能感兴趣的:(知识整理(六):RocketMQ 相关知识)