RocketMQ核心架构设计思想(上)

简介: RocketMQ核心架构设计思想(上)

RocketMQ中NettyRemotingServer的Reactor多线程模型


image.png

1、
一个 Reactor 主线程(eventLoopGroupBoss)
负责监听 TCP网络连接请求
建立好连接
创建SocketChannel
并注册到selector上
2、拿到网络数据后
再丢给Worker线程池(eventLoopGroupSelector)
3、在真正执行业务逻辑之前先需要defaultEventExecutorGroup进行
SSL验证、编解码、空闲检查、网络连接管理
4、根据 RomotingCommand 的业务请求码code去processorTable
这个本地缓存变量中找到对应的 processor
然后封装成task任务后
提交给对应的业务processor处理线程池来执行


消息过滤


image.png

1、
Consumer端订阅消息
是需要通过ConsumeQueue这个消息消费的逻辑队列拿到一个索引
然后再从CommitLog里面读取真正的消息实体内容
2、ConsumeQueue的存储结构
有8个字节存储的Message Tag的哈希值
基于Tag的消息过滤正式基于这个字段值的
  • Tag过滤方式

image.png

1、
一个消息有多个TAG
Consumer端在订阅消息时可以指定Topic或指定TAG
2、
发送一个Pull消息的请求给Broker端
3、
Broker端从RocketMQ的文件存储层—Store读取数据之前
a、
会用这些数据先构建一个MessageFilter
然后传给Store
b、
Store从 ConsumeQueue读取到一条记录后
会用它记录的消息tag hash值去做过滤
c、
由于在服务端只是根据hashcode进行判断
无法精确对tag原始字符串进行过滤
故在消息消费端拉取到消息后
还需要对消息的原始tag字符串进行比对
如果不同,则丢弃该消息,不进行消息消费
  • SQL92的过滤方式



image.png


和上面的Tag过滤方式区别只是在Store层的具体过滤过程不太一样
Store层通过SQL表达式检索ConsumeQueue索引
因会影响效率
所以在检索之前通过布隆过滤器避免每次都通过SQL表达式检索


负载均衡


Producer负载均衡

image.png

1、
Producer端在发送消息的时候
会先根据Topic找到指定的TopicPublishInfo
2、
在获取了TopicPublishInfo路由信息后
RocketMQ的客户端在默认方式下selectOneMessageQueue()方法
会从TopicPublishInfo中的messageQueueList中
3、
选择一个队列(MessageQueue)进行发送消息


具体的容错策略

image.png

何为不可用

就是按之前失败的
按一定的时间做退避
如果上次请求的延迟超过550Lms
就退避3000Lms
在这期间该broker代理不可用



相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
消息中间件 存储 JSON
RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读
RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读
41 0
|
22天前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
46 0
RabbitMQ入门指南(二):架构和管理控制台的使用
|
2月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,架构解析:云原生架构如何支撑多元化场景?
了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管控链路、数据链路、客户端和服务端如何交互;学习 RocketMQ 如何实现数据的存储,数据的高可用,如何利用云原生存储进一步提升竞争力。
140094 2
|
2月前
|
消息中间件 缓存 API
|
4月前
|
消息中间件 存储 网络协议
MQ - 09 RabbitMQ的架构设计与实现
MQ - 09 RabbitMQ的架构设计与实现
65 0
|
5月前
|
消息中间件 存储 容灾
9个问答牢记RocketMQ架构
RocketMQ是Java兄弟们常用的消息中间件,虽说常用,但对于RocketMQ架构经常忘记。究其原因就2点:忙于业务开发然后长时间不看则忘了、不理解架构设计的根本原因记不牢。本文用大白话描述架构设计过程,牢记RocketMQ架构。
9个问答牢记RocketMQ架构
|
7月前
|
消息中间件 存储 网络协议
RabbitMQ的架构设计
RabbitMQ的架构设计
46 0
|
8月前
|
消息中间件 存储 监控
RocketMQ 的基本概念、架构设计、特点以及适用场景
RocketMQ 的基本概念、架构设计、特点以及适用场景
577 0
RocketMQ 的基本概念、架构设计、特点以及适用场景
|
8月前
|
消息中间件 程序员 Apache
阿里RocketMQ创始人首次分享出这份RocketMQ技术内幕神级架构手册
RocketMQ的发展史? RocketMQ的开源正是源于对这种开源文化的认同,开放是为了更好的协同创新,并将这一技术推向新的高度。在经历了阿里巴巴集团内部多年“双11”交易核心链路工业级场景在验证,2016年11月,团队将RocketMQ捐献给全球享有盛誉的Apache软件基金会正式质为孵化项目。 至此,RocketMQ开启了迈向全球顶级开源软件的新征程。
|
9月前
|
消息中间件 存储 负载均衡
RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景
RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景