RocketMQ
文章平均质量分 87
93张先生
这个作者很懒,什么都没留下…
展开
-
事务消息
总览RocketMQ事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。RocketMQ 事务消息设计则主要是为了解决 Producer 端的消息发送与本地事务执行的原子性问题,RocketMQ 的设计中 broker 与 producer 端的双向通信能力,使得 broker 天生可以作为一个事务协调者存在;原创 2021-02-03 18:08:10 · 807 阅读 · 0 评论 -
顺序消息
顺序消息顺序消息是指消息消费的顺序和生产者发送消息的顺序一样的。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。RocketMQ可以严格的保证消息有序。分区有序分区有序是指这个Topic下这个队列下的消息是有顺序的,生产者发送消息的时候,将严格按照消息的顺序,将消息们发送到一个Topic下的一个队列,从而保证了生产者分区消息有序,消费者进行消费时,进行单线程单队列消费,保证了消费有序。适用场景:性能要求高,以 s原创 2021-02-03 18:07:41 · 399 阅读 · 0 评论 -
定时消息机制
概览定时消息是指消息发送到Broker后,并不立即被消费者消费而是要等到特定的时间后才能被消费。broker有配置项messageDelayLevel,默认值为“1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h”,18个level。可以配置自定义messageDelayLevel。注意,messageDelayLevel是broker的属性,不属于某个topic。发消息时,设置delayLevel等级即可:msg.setDelayLev原创 2021-02-03 18:06:32 · 400 阅读 · 0 评论 -
消息拉取与消息队列的负载均衡
总览消息消费的模式有两种推模式、拉模式;拉模式已经不再推荐使用,因此本章将详细介绍推模式。推模式消息到达消息服务器后,服务器推送消息给消费者。 RocketMQ消息推模式并不是真正意义上的服务端将消息推送给消费端。本质实现为消费端消息拉取线程在从服务器拉取到一批消息后,然后提交到消息消费线程池后,又“马不停蹄”的继续向服务器再次尝试拉取消息,再提交到消息消费线程池,然后由消费端消费线程异步的从消费线程池获取消息进行消息消费,解耦了消息拉取和消息消费过程。如果未拉取到消息,则延迟一下又继续拉取。负载均原创 2021-02-03 18:05:44 · 1020 阅读 · 0 评论 -
RocketMQ消费启动流程
概览消息消费包含两种推模式和拉模式,拉模式官方已经不推荐使用,那我们今天就介绍推模式。DefaultMQPushConsumer是推模式消费的对外API,消费的功能主要由成员变量DefaultMQPushConsumerImpl提供。DefaultMQPushConsumerImpl是消息消费的主要实现类。消费者启动流程关键步骤如下:this.copySubscription();订阅重试主题消息。从这里可以看出,RocketMQ消息重试是以消费组为单位的,而不是主题,消息重试主题名为"%RETR原创 2021-02-03 18:04:58 · 210 阅读 · 0 评论 -
RocketMQ消息消费概览
概览RocketMQ消息消费以消费组为消费维度的,消费组之间消息消费有集群模式与广播模式两种消费模式。广播模式主题下的同一条消息将被集群内的所有消费者消费一次。集群模式主题下的同一条消息只允许被其中一个消费者消费。一个消费组内可以包含多个消费者,一个消费者组订阅相同的消息主题,一个主题Topic拥有多个消息存储队列。每一个组内的消费者可以消费这个Topic下的多个消息队列,Topic下的一个消息队列只能被一个同一个组的一个消费者消费。消息服务器与消费者之间的消息传送也有两种方式:推模式、拉模式。原创 2021-02-03 18:04:30 · 311 阅读 · 0 评论 -
RocketMQHA机制
概览RocketMQ作为一款优秀的分布式消息中间件,分布式系统的一个很重要的特点就是要保证系统的高可用(HA),RocketMQ则是通过主从同步机制保证系统的高可用。下面是两主两从的主从同步原理图。主从两节点优点数据备份:保证了两/多台机器上的数据冗余,特别是在主从同步复制的情况下,一定程度上保证了Master出现不可恢复的故障以后,数据不丢失。高可用性:即使Master掉线, Consumer会自动重连到对应的Slave机器,不会出现消费停滞的情况。提高性能:主要表现为可分担Master读原创 2021-01-24 22:27:31 · 427 阅读 · 0 评论 -
RocketMQ刷盘机制
概览RocketMQ的存储读写是基于JDK NIO的内存映射机制的,消息存储时首先将消息追加到内存中。在根据不同的刷盘策略在不同的时间进行刷盘。如果是同步刷盘,消息追加到内存后,将同步调用MappedByteBuffer的force()方法,同步等待刷盘结果,进行刷盘结果返回。如果是异步刷盘,在消息追加到内存后立刻,不等待刷盘结果立刻返回存储成功结果给消息发送端。RocketMQ使用一个单独的线程按照一个设定的频率执行刷盘操作。通过在broker配置文件中配置flushDiskType来设定刷盘方式,AS原创 2021-01-24 22:26:26 · 597 阅读 · 0 评论 -
Index索引文件及构建
Index索引文件概览消息消费队列是RocetMQ专门为消息订阅构建的索引服务,提高主题与消息队列检索消息的速度。IndexFile(索引文件)提供了一种可以通过key或时间区间来查询消息的方法。Index文件的存储位置是:$HOME/store/index/{fileName},文件名fileName是以创建时的时间戳命名的,固定的单个IndexFile文件大小约为400M,一个IndexFile可以保存 2000W个索引,IndexFile的底层存储设计为在文件系统中实现HashMap结构,故rock原创 2021-01-24 22:24:10 · 1746 阅读 · 0 评论 -
ConsumeQueue索引文件及构建
ConsumeQueue概览RocketMQ是基于主题订阅模式实现消息消费,消费者关心的是主题Topic下的所有消息,同一主题的消息不连续地存储在commitlog文件中,如果直接从commitlog文件中去遍历查找订阅主题下的消息,效率极其低下,为了适应消息消费的检索需求,设计了消息消费队列文件ConsumeQueue,该文件可以看成是Commitlog关于消息消费的索引文件,consumequeue的一级目录为主题Topic,二级目录为Topic的消息队列。主要是针对每一个Topic建立的索引,方便消原创 2021-01-24 22:23:12 · 790 阅读 · 0 评论 -
RocketMQ存储文件与内存映射
概览RocketMQ的消息存储主要是在${ROCKETMQ_HOME}/store文件夹下,message消息主要存储在commitlog文件夹下,RocketMQ消息存储和索引是分开隔离的,已Topic为主题的消息索引存储在consumequeue文件夹下,通过MessageQueue映射为ConsumeQueue的文件就存储在这个文件夹下,然后index主要是以消息key和offset的对应关系,以类似HashMap的方式存储,方便消息查询。本片文章主要介绍消息存储组织结构、Message是如何快原创 2021-01-24 22:22:19 · 930 阅读 · 0 评论 -
RocketMQ 发送消息存储流程
存储总览业务系统大多数需要 MQ 有持久存储的能力,能大大增加系统的高可用性。从存储方式和效率来看,文件系统高于 KV 存储,KV 存储又高于关系型数据库,直接操作文件系统肯定是最快的,但可靠性却是最低的,而关系型数据库的性能和可靠性与文件系统恰恰相反。存储实现RocketMQ 存储概要设计消息发送存储流程存储文件组织与内存映射机制RocketMQ 存储文件消息队列、索引文件构建和机制RocketMQ 文件恢复机制RocketMQ 刷盘机制RocketMQ 文件删除机制存储概要设计原创 2021-01-24 22:21:21 · 239 阅读 · 0 评论 -
RocketMQ 发送消息
概览RocketMQ 支持 种消息发送方式 :同步(sync)、 异步(async)、单向(oneway)。Message消息封装类 org.apache.rocketmq.common.message.Messagepublic class Message implements Serializable { private static final long serialVersionUID = 8445773977080406428L; private String topi原创 2021-01-24 22:20:02 · 330 阅读 · 0 评论 -
RocketMQ架构概览
起因阿里巴巴团队使用 ActiveMQ 5.x处理消息,遇到瓶颈;而此时分布式流式处理引擎 Kafka 已经兴起,Kafka 存在高延迟、没有事务支持等功能就被放弃了,而阿里巴巴团队基于消息队列的基础模型开发了 RocketMQ,可以理解为 RocketMQ 为处理消息而生。架构组件NameServerNameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步,他们之间是独立的、并行的,各自保留了一份全部的 Broker、Topic 等集群信息。非常简单的 Topic 路由注原创 2021-01-24 22:17:08 · 129 阅读 · 0 评论