RocketMQ-笔记,简介整体架构

简介: rocketMQ技术内幕笔记

1. RocketMQ的理念:

  • rocketMQ同大多数的消息中间件类似,都是基于主体消息的发布和订阅模式,其最核心的就是消息的发送,消息的存储,消息的接收,路由信息四部分组成,他的设计有一下几个特点:

    • nameSrv的出现摒弃了以前需要依赖zookeeper作为注册中心,使用namesrv来保存元数据,设计简单,namesrv之间不相互通信,降低网络消耗,不追求像zookeeper一样的强一致性,而是保证了其最终一致性。
    • namesrv的高性能io存储,RocketMQ追求的是高性能消息发送,其内部存储采用了文件组的形式,组内的每个文件有固定的大小,方便引用内存映射机制,所有主题的消息都是按顺序写入,极大的提高了写的性能,同时为了兼顾消息的消费和消息的查找引入了消息消费的队列文件和索引文件
    • 容忍设计上的缺陷,让用户去解决一些问题,给予用户最大限度的自由发挥,比如消息重复消费的问题。

2. RocketMQ作为一款高性能消息中间件需要解决的问题有以下几个方面

  • 架构模式

    • 架构模式与普通的消息中间件类似都是基于发布订阅的模式,核心是消息的发送,消息的存储,消息的接收,消息路由
  • 顺序消息

    • 严格保证消息的顺序性,消费者消费的消息严格按照到达消息服务器存储的消息顺序。
  • 消息过滤

    • 消费者在消费的时候过滤,消费者在订阅某一个主体的消息的时候可以按照一定规则注册自己感兴趣的消息,一种是broker端过滤,只推送给消费者感兴趣的消息,一种是在消费者端过滤,这种会有很多无用消息需要过滤。
  • 消息存储

    • RocketMQ 追求消息存储的高性能,引人内存映射机制,所
      有主题的消息顺序存储在同一个文件中 同时为了避免消息无限在消息存储服务器中累积,引入了消息文件过期机制与文件存储报警机制
  • 消息到达低延迟

    • RocketMQ 在消息不发生消息堆积时,以长轮询模式实现准实时的消息推送模式。
  • 定时消息

    • 消息发送之后不要求消费者立即消费需要在某个特定的时间点或者任意精度的时间被消费者消费,如果要支持任意精度,势必要在消息的服务端就消息进行排序,性能消耗很大,所以rocketMQ不支持任意精度的定时,而是支持特定的延时级别
  • 消息的高可用

    • 1,Broker正常关机
    • 2,Broker异常关机
    • 3,OS Crash
    • 4,机器断电,但 能立即恢复供电情况
    • 5,机器无法开机
    • 6,磁盘设备损坏
    • 情况 1~4 RocketMQ 在同步刷盘机制下可以确保不丢失消息,在异步刷盘的时候会丢失少量消息,5-6属于单点故障,一旦发生,消息全部丢失,如果开启可异步复制,会丢失少量的数据,但是够来rocketMq开启了双鞋机制,满足可用性极高的场景
  • 保证每个消息被消费一次

    • 保证每个消息至少被消费一次,但由于ack消息丢失等原因造成的重复消费需要用户自己去处理
  • 回溯消息

    • 消息消费之后还可以再次消费
  • 消息的堆积能力

    • 应对洪峰数据,提高系统的可用性,必然要求我们有一定的消息堆积能力,RocketMQ采用了磁盘文件(内存映射机制),并且在物理布局上为多个大小相等的文件组成一个逻辑组,可无限循环使用,还提供了过期机制,默认是保留3天的消息。
  • 消息的重试机制

    • 消息在消费的时候,如果消费失败,消息中间件支持重新发送消费

3. 整体架构

  • rocketMQ的流程,首先启动namesrv,然后broke服务器在启动的时候会向所有的namesrv服务器注册,消息生产者在发送消息之前先从namesrv中根据topic找到对应的namesrv地址列表,然后根据负载均衡算法从列表中选取一个namesrv发送消息,namesrv和broker之间保持长连接,每隔30sbroker会向namesrv发送心跳检测信息,namesrv定时任务会每120秒扫描一次列表如果有超过120秒没有收到消息那么就认为其故障然后移除列表了,,但是这个路由消息不会立马同步给其他namesrv,也不会立马通知生产者需要生产者自己拉取,因为namesrv之间是不同步信息的,会造成短暂的不一致的情况,这是为了降低namesrv的设计复杂度,我们可以从消息的发送端解决这个问题保证消息的高可用,消息到达broker之后,broker会将其存储,并且推送给订阅这个消息的消费者。

下面会根据章节介绍rocketMQ的重要组件namesrv,生产者,存储,消费者,过滤,主从同步,事务

eae765ca9ee599820634ca988e57923d50cc28a7

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
9天前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
37 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
6天前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
本系列学习教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin语法的读者,建议参考“简洁”系列教程。本文重点介绍了Kotlin实现MVVM架构的设计思路和代码实现,包括Model、ViewModel和View层的具体实现,以及如何通过LiveData和viewModelScope有效管理数据和内存,避免内存泄漏。此外,还讨论了MVVM架构的常见缺点及应对策略,帮助开发者在实际项目中更好地应用这一设计模式。
16 1
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
307 37
|
8天前
|
前端开发 测试技术 数据处理
Kotlin教程笔记 - MVP与MVVM架构设计的对比
Kotlin教程笔记 - MVP与MVVM架构设计的对比
20 2
|
8天前
|
XML 前端开发 Android开发
Kotlin教程笔记(80) - MVVM架构设计
Kotlin教程笔记(80) - MVVM架构设计
20 2
|
1月前
|
负载均衡 数据库 开发工具
|
1月前
|
Java 数据库 Maven
谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器
项目介绍、项目环境搭建、docker配置mysql,redis,jdk,maven、人人开源、快速开发、安装nodejs、逆向工程搭建,人人开源代码生成器
谷粒商城笔记+踩坑(1)——架构、项目环境搭建、代码生成器
|
5天前
|
存储 前端开发 Java
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
Kotlin教程笔记 - MVVM架构怎样避免内存泄漏
|
1月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ 版架构优化评测
云消息队列RabbitMQ 版架构优化评测
52 6
|
8天前
|
前端开发 JavaScript 测试技术
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
Kotlin教程笔记 - 适合构建中大型项目的架构模式全面对比
19 0