![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
RocketMQ源码
文章平均质量分 76
yankunhaha
这个作者很懒,什么都没留下…
展开
-
RocketMQ消息消费六:消息过滤
概述RocketMQ的消息过滤分为两种:表达式过滤和类过滤。表达式过滤针对消息的属性过滤,适合于简单的场景,类过滤可以实现复杂的逻辑。表达式过滤表达式过滤分为tag过滤和SQL92过滤。SQL92在这里不展开描述,只介绍下tag过滤。在客户端发送消息的时候可以指定消息的tag,并根据消息的tag生成哈希值,为tagcode,存储在CommitLog中。所以tag过滤分为两部分:拉取过滤和消费过滤,分别发生在broker端和消费端。拉取过滤消费者过滤规则存储消费者订阅消费组时,将消息的过滤保存,原创 2020-05-24 11:41:25 · 1224 阅读 · 1 评论 -
RocketMQ消息消费五:延迟消息
概述延迟消息也叫定时消息,是指需要在一段时间后被消费的消息。考虑这种场景:用户下单后10分钟后不付款将订单取消,可以在用户下单后发送延迟消息,延迟10分钟检查订单如果未支付则取消订单。RocketMQ本身的commitLog采用顺序存储消息的方式,如果在commitLog实现延迟消息,需要对commitLog排序等处理,这与RocketMQ的设计理念不合。故RocketMQ针对延迟消息,只支持特...原创 2019-08-25 21:44:56 · 5067 阅读 · 1 评论 -
RocketMQ消息消费四:消费进度offset存储
概述消息消费完成后,需要将消费进度存储起来,即前面提到的offset。广播模式下,同消费组的消费者相互独立,消费进度要单独存储;集群模式下,同一条消息只会被同一个消费组消费一次,消费进度会参与到负载均衡中,故消费进度是需要共享的。消费进度相关类OffsetStore为统一的消费进度接口,定义了操作入口public interface OffsetStore { /** ...原创 2019-08-25 11:23:39 · 8859 阅读 · 2 评论 -
RocketMQ消息消费三:负载均衡
概述这篇文章介绍RocketMQ消费消息的负载均衡策略。因为消费消息的方式push&pull实际上均由pull模式实现,所以具体负载均衡是在客户端完成的。核心类—RebalanceImpl在Consumer启动的过程中会完成RebalanceService启动,每20s执行一次,最终调用RebalanceImpl来实现。RebalanceImpl为抽象类,子类有RebalancePu...原创 2019-08-25 09:55:13 · 993 阅读 · 0 评论 -
RocketMQ消息消费二:长轮询
概述前面提到了,RocketMQ没有真正实现push模式消费,而是通过pull来实现。为了提高性能,未拉取到消息时,并不会返回消息未找到,而是将拉取请求挂起,直到有消息到来被唤醒或者超时。轮询分类分为长轮询和短轮询。短轮询1s,长轮询push模式为15s,pull模式为20s。轮询触发逻辑在 PullMessageProcessor.processRequest() 中 ...原创 2019-08-10 16:19:56 · 837 阅读 · 0 评论 -
RocketMQ消息消费一:消息拉取
概述前面讲了消息在broker端的存储,下面讲消息在消费者端的消费。简单介绍几个消费相关的概念。集群消费&广播消费是消费者两种不同的消费模式,广播消费模式下,一个消息会被所有的机器消费。集群消费模式下,一个消息只会被同一个集群消费一次,这里的集群由ConsumerGroup相同的机器组成。ConsumerGroup消费者归属于一个ConsumerGroup,相同ConsumerG...原创 2019-08-10 15:32:48 · 3056 阅读 · 0 评论 -
RocketMQ消息存储五:逻辑对象层IndexFile
概述IndexFile存储消息的索引信息,可以根据key进行查找。存储文件信息存储目录为HOME/store/index/,每个文件大小为420000040字节。文件名字为创建时的时间戳。IndexFile格式可以把IndexFile理解为哈希表。IndexFile解决冲突的方式是拉链,即把哈希值相同的数据存到链表中。如果在内存中,数据结构应该是一个slot数组,对象类型为index的一...原创 2019-07-23 08:07:13 · 453 阅读 · 0 评论 -
RocketMQ消息存储四:逻辑对象层ConsumeQueue
概述ConsumeQueue存储逻辑消费队列,每个ConsumeQueue对应一个topic的一个queue。存储文件信息ConsumeQueue与CommtLog一样,也包含MappedFileQueu。ConsumeQueue存储目录为HOME/store/consumequeue/HOME/store/consumequeue/HOME/store/consumequeue/{topi...原创 2019-07-21 15:39:18 · 1123 阅读 · 0 评论 -
RocketMQ消息存储三:逻辑对象层CommitLog
概述CommitLog中存储了消息的完整信息,所有topic的消息都存储在一个CommitLog中。下面讲一下CommitLog的存储格式和存储过程存储文件信息CommtLog的存储其实是分多层的,CommitLog -> MappedFileQueue -> MappedFile,其中真正存储数据的是MappedFile。CommitLog存储目录为$HOME\store\co...原创 2019-07-21 13:41:39 · 2209 阅读 · 1 评论 -
RocketMQ消息存储六:文件内存映射对象层MappedFile
概述这一层包含MappedFileQueue、MappedFile、MappedByteBuffer,其中MappedFileQueue在介绍CommitLog的时候已经讲过了,可以参考CommitLog。MappedFile对应着磁盘上的存储文件,同时也是MappedByteBuffer的封装,消息存储跟磁盘、内存的交互都是通过它完成。属性介绍 // 默认页大小 public...原创 2019-07-25 08:42:56 · 2848 阅读 · 0 评论 -
RocketMQ消息存储二:数据文件存组件储层
数据文件存储组件层只有一个类DefaultMessageStore,它负责所有存储相关的工作,上层业务中的消息发送处理、查询处理、拉取处理,最终都委托给DefaultMessageStore操作。核心属性 // 存储配置 private final MessageStoreConfig messageStoreConfig; // CommitLog原始消息存储 ...原创 2019-07-17 20:10:00 · 1902 阅读 · 1 评论 -
RocketMQ消息存储一:概览
前面介绍了消息的发送,这节主要介绍消息的存储。这里只关注普通消息,事务消息在后面介绍。MQ存储方式一般有分布式kv、文件系统、DB等,不同的MQ根据设计的不同有各自的选择,RocketMQ同kafka一样,选择了文件系统作为存储方式,在存储设计上借鉴了kafka。RocketMQ与kafka对比kafka将消息用topic+partition分割成不同的文件,在topic和partitio...原创 2019-07-10 08:50:50 · 470 阅读 · 0 评论 -
RocketMQ源码学习-普通消息发送
系列文章总目录本文介绍普通消息的发送过程,事务消息在后面陈述。发送消息入口在测试代码中,DefaultMQProducerTest提供了消息发送的测试用例,可以看到,消息的发送由DefaultMQProducer完成,提供了多种发送入口,最终在DefaultMQProducerImpl.sendDefaultImpl进行。sendDefaultImpl参数介绍private SendRe...原创 2018-12-31 18:04:53 · 231 阅读 · 0 评论 -
RocketMQ源码学习-NameServer
系列文章总目录前言NameServer,用来提供服务发现和服务治理功能。RocketMQ中的NameServer是一个无状态的服务,可以有多个节点,各个节点之间不进行通信,Broker、Client跟所有的NameServer通信。NameServer的功能如下:维护Broker信息。每个Broker启动后向NameServer注册,NameServer保存活跃的Broker列表,包括Ma...原创 2018-12-12 19:04:51 · 283 阅读 · 0 评论 -
RocketMQ源码学习-通信与协议
系列文章总目录从github clone 最新源码,结构如下:本篇文章要讲的通信与协议部分的源代码在remoting模块下。remoting模块是复杂网络通信的模块,为其他需要网络通信的模块所依赖。在这个模块中,RocketMQ定义了基础的通信协议,结合Netty,使得端与端之间的数据交互变得统一而高效。基本类图先来看这个模块的类关系图:针对每个类分别做解释:RemotingServ...原创 2018-11-20 21:27:46 · 840 阅读 · 0 评论 -
RocketMQ-快速上手
总目录总纲环境依赖JDK 1.8+maven下载二进制包地址:http://rocketmq.apache.org/release_notes/release-notes-4.3.2/下载完成后,解压到自己指定的目录,如 /Users/root/usr/rocketmq配置环境变量增加如下:export ROCKETMQ_HOME=/Users/root/usr/rocketm...原创 2018-11-20 17:52:28 · 303 阅读 · 0 评论 -
RocketMQ源码学习-总纲
总纲RocketMQ相关的介绍在这里就不做赘述了,详细请参见apache官方主页 和 github。源码学习总结基于4.4.0-SNAPSHOT,包含如下几个模块:简介通信协议通信框架传输协议NameServer消息发送brokerCommitLog存储ConsumeQueue&Index存储数据刷盘&文件删除主从与高可用消息消费顺序消...原创 2018-11-20 16:25:19 · 223 阅读 · 0 评论