RocketMQ
文章平均质量分 87
11来了
目前在读研究生研二,会持续分享后端系列完整内容以及面试分析!
展开
-
基于电商场景的高并发RocketMQ实战-发送优惠券流程解析、生产环境的落库与定时推送解决方案
🌈🌈🌈🌈🌈🌈🌈🌈欢迎关注公众号(通过文章导读关注),发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列笔记和编程高频电子书!【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁原创 2024-01-03 09:34:48 · 1122 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-促销活动推送至用户完整流程、Spring结合RocketMQ的生产者消费者使用
🌈🌈🌈🌈🌈🌈🌈🌈欢迎关注公众号(通过文章导读关注),发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列笔记和编程高频电子书!【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁原创 2024-01-03 09:34:30 · 413 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-促销活动推送千万级用户解决方案【多线程+分片推送实现高性能推送】
首先来了解一下为什么要对用户进行分片:在电商场景中用户的数量是相当庞大的,中小型电商系统的用户数量都可以达到千万级,那么如果给每一个用户都生成一条消息进行 MQ 推送,这个推送的时间相当漫长,必须优化消息推送的速度,因此将多个用户。这里主要说一下对于核心线程数量的设置,直接设置为 0,因为这个线程池主要是对促销活动的消息进行推送,这个推送任务并不是一直都有的,有间断性的特点,因此不需要线程常驻在线程池中,空闲的时候,将所有线程都回收即可。来进行推送,这样消耗的时间可能还有些久,就再将多个分片。原创 2024-01-02 14:30:56 · 1381 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-初版营销系统设计方案、千万级用户分片+批量推送方案、惰性发券
🌈🌈🌈🌈🌈🌈🌈🌈欢迎关注公众号(通过文章导读关注),发送笔记可领取 Redis、JVM 等系列完整 pdf!【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁原创 2023-12-28 11:24:41 · 1289 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-电商的业务闭环知识、营销系统的技术架构
🌈🌈🌈🌈🌈🌈🌈🌈欢迎关注公众号(通过文章导读关注),发送笔记可领取 Redis、JVM 等系列完整 pdf!🍁🍁🍁🍁🍁🍁🍁🍁。原创 2023-12-28 11:04:15 · 450 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Consumer端队列负载均衡分配机制、并发消费以及消费进度提交
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁topic 是有一堆的 queue,而且分布在不同的 broker 上并且在消费时,将多个 queue 分配给多个 consumer,每一个 consumer 会分配到一部分的 queue 进行消费每个 consumer 会获取到 以及 ,那么 consumer 都使用相同的算法去做一次分配Consumer 分配队列:Consumer 端队列的分配是通过 这个组件实现的,拉取 Topic 的原创 2023-12-27 10:07:58 · 1579 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Broker 基于 DLedger 的数据写入流程
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁DLedger 是一套基于 Raft 协议的分布式日志存储组件,部署 RocketMQ 时可以根据需要选择使用 DLeger 来替换原生的副本存储机制leader 对外提供读写服务:在 Raft 协议之下,选举出 leader 之后,只有 leader 对外提供读和写的服务,而 follower 对外是不提供服务的,仅仅是用于数据复制的同步在 Raft 协议之下,如果是一边写 leader,一边从原创 2023-12-27 10:06:03 · 1007 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Raft协议的leader选举算法、Broker基于状态机实现的leader选举
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁Raft 协议是一种分布式一致性算法,用于解决分布式系统中的数据一致性问题。Raft 协议将整个系统的状态分为 3 种角色:领导者 leader、跟随者 follower、候选者 candidate那么通过 Raft 协议进行的 leader 选举算法流程如下:状态机(State Machine)指的是一种抽象模型,包括一组状态以及在不同状态之间转换的规则,在不同状态下执行的行为是不同的Broke原创 2023-12-26 10:36:22 · 1082 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-读写分离主从漂移设计、Broker基于raft协议的主从架构设计
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁默认情况下,RocketMQ 是不倾向于主动进行读写分离的,在默认情况下,读和写操作都是在 上进行的,从节点主要是用于进行复制和同步操作,实现热备份如果主节点过于繁忙呢?主节点过于繁忙时,返回给消费者一个从节点的 brokerId ,之后在从节点中拉取数据,当从节点拉取消息过程非常顺利的时候,此时又会返回给消费者一个 brokerId,让消费者去主节点进行消费,再漂移回主节点那么这种方式就是 ,原创 2023-12-26 10:34:40 · 1064 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁Broker 写入读取流程性能优化总结Broker 的物理存储结构主要是为了优化三个方面:写入、存储、读取原创 2023-12-25 10:28:45 · 1133 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Commitlog基于内存的高并发写入优化、基于JVM offheap的内存读写分离机制
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁Commitlog 基于内存的高并发写入优化原创 2023-12-25 10:23:37 · 1256 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-Broker高并发消息写入、读写队列原理分析
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁Broker 对消息进行写磁盘是采用的 ,写磁盘分为两种:顺序写和随机写,两种速度差别非常大!Broker 通过顺序写磁盘,也就是在文件末尾不停追加内容,不需要进行寻址操作,大幅度 这里消息写入的就是 Commitlog 文件!磁盘顺序写和磁盘随机写的速度差距如下图:在将消息写入 Commitlog 文件之后,会有一个后台线程去监听 Commitlog 是否有数据写入,如果有就将新写入的数据写入原创 2023-12-24 10:10:58 · 1051 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-NameServer内存中核心数据模型分析、内核级Producer发送消息流程
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁。原创 2023-12-24 09:57:07 · 1022 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-NameServer内存中核心数据模型分析、内核级Producer发送消息流程
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁NameServer 中虽然每隔 10s 中会去检查是否有故障 Broker,将故障 Broker 剔除掉,但是此时生产者的 Topic 缓存中还是有故障 Broker 的信息的,只有等 30s 之后刷新,才可以感知到这个 Broker 已经故障了。可以避免去做许多麻烦的操作,如果 Broker 挂掉之后,要让生产者立马感知到,原创 2023-12-23 09:34:25 · 903 阅读 · 0 评论 -
基于电商场景的高并发RocketMQ实战-NameServer内核原理剖析、Broker 主从架构与集群模式原理分析
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁。原创 2023-12-23 09:33:10 · 647 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁消息出现大量堆积的原因是:生产者速度 >> 消费者速度首先需要排除 的问题,再去对 RocketMQ 的配置做处理!那么对于消息堆积的处理,就分为两种情况:事发时处理:扩容消费者(在消费者数量 < MessageQueue 的情况下)这里 是有依据的,比如一个 Topic 下有 8 个 MessageQueue,那么最多将消费者数量增加到 8 个,因为 Topic 下一个队列只可以被同一消费者原创 2023-12-22 18:48:28 · 2017 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ高级特性之文件恢复与 CheckPoint 机制
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁文件恢复的目的:让 Broker 重新启动之后,可以完成对 指针位置的设置,让程序可以知道上次写的位置,可以继续接收消息在上次写的位置之后继续写数据!如何检测是否正常:首先检查 Broker 是否正常退出的标准就是: 文件是否存在,如果存在表示 Broker 异常退出abort 文件是 Broker 启动时会创建的一个临时文件,当 Broker 正常退出时,通过注册的 JVM 钩子函数就会将 a原创 2023-12-22 11:39:34 · 1113 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ高级特性之消息存储的高效与刷盘策略、Broker 快速读取消息机制
🌈🌈🌈🌈🌈🌈🌈🌈【11来了】文章导读地址:点击查看文章导读!🍁🍁🍁🍁🍁🍁🍁🍁RocketMQ 是通过文件进行存储消息的,那 RocketMQ 是如何保证存储的高效性的呢?首先是通过对磁盘进行 可以保证高性能的文件存储:(图片来源于网络)文件拷贝利用了 以及内存映射技术(MMP)通过使用零拷贝减少数据拷贝次数利用内存映射技术(MMP)可以像读写磁盘一样读写内存,可以获得很大的 IO 提升,但是写道 MMP 中的数据并没有被真正写到磁盘中,操作系统会在程序主动调用 flu原创 2023-12-21 20:46:48 · 1016 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ高级特性之消息存储在Broker的文件布局
ReputMessageService 线程中的 run 方法,会每隔 1ms 就会去 Commitlog 中取出数据,写入到 ConsumeQueue 和 IndexFile 中。这个 ByteBuffer 在创建的时候已经将一些默认信息设置好了,这里只需要对写入消息后会变化的信息进行修改!方法中主要是写入消息之后,Commitlog 中一些数据会发生变化,因此需要进行修改,还是经过层层调用。接下来看一下 IndexFile 结构是怎样的,在上边寻找 ConsumeQueue 的调用链中,有一个。原创 2023-12-21 16:48:32 · 874 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ原理分析之Broker接收消息的处理流程
那么消息既然是从生产者开始发送,消息是有单条消息和批量消息之分的,那么消息肯定是有一个标识,当 Broker 接收到消息之后,肯定是需要通过判断消息的标识来区分单条消息和批量消息,那么只需要找到发送消息的标识,再全局搜索,就可以找到这个标识在哪里被处理,被处理的地方一定就是 Broker 接收消息处理的位置了!Topic 的一些配置是否存在?那么 Broker 总体的接收消息的处理流程就是上边将的这么多了,当然还有一些边边角角的内容没有细说,先了解整体的处理流程,不要提前去学习太多的细节!原创 2023-12-20 22:30:04 · 947 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ原理分析之消息的可靠性以及有序性如何保证
这要看消息的生命周期,既然保证可靠性,那么就是要保证 A 发送给 B 的消息一定可以成功,那么首先要保证发送成功,其次要保证 B 接收成功,而在 RocketMQ 中,消息是先发送到 Broker 中了,那么还需要保证 MQ 在 Broker 中不会丢失,因此 RocketMQ 是从三方面保障了消息的可靠性:生产者、Broker、消费者。生产者保证消息的可靠性:生产者发送消息分为同步发送、异步发送、单向发送三种方式,那么单向发送是没有消息可靠性的保证的,而在同步和异步发送中,都可以通过添加消息的。原创 2023-12-19 23:43:38 · 608 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ原理分析之消费者的接收消息流程
就可以知道了,找到之后呢,我们在这一行打个断点,再去启动生产者,就可以知道整个调用链了,类中,这个类并没有定义 run 方法,因此呢,这个 run 方法应该是定义在了子类。点进去之后,发现就是启动了一个线程,这个线程呢就是。类中,点进去找到 run 方法,可以看到在 run 方法中就会不停地去。,那么我们点进去这个 start 方法是定义在。既然在这里拉取数据了,那么数据是什么时候放到。那么呢,我们之前说了在启动客户端的时候,调用。启动了这个线程,那么在下一行就启动了。的 run 方法进入的,那么这个。原创 2023-12-19 22:18:06 · 500 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ原理分析之NameServer 路由注册机制、生产者的发送消息流程
获取 RouteInfoManager,在该类中注册 Broker 信息,那么 RouteInfoManager 肯定是管理了 Broker 的信息。来注册 Broker 的信息,这个 Broker 的信息是 BrokerController 启动时通过 Netty 发送过来的。方法将消息发送出去,接下来又是层层的调用,最后真正通过 Netty 将消息发送出去的地方在。在这个方法中,还会对消息进行前置拦截和后置拦截,为开发者的使用提供了很多的扩展点,在这里就。在注册信息之前,会先使用。原创 2023-12-18 23:13:40 · 1292 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ原理分析之源码启动、Broker启动流程分析
先创建 BrokerController 控制器,BrokerController 控制器对象包含了各种 Config 配置对象以及 Manager 管理对象。创建完 BrokerController 控制器之后,还会判断是否创建成功,以及注册钩子。:创建完 BrokerController 后,启动 BrokerController。注册 JVM 进程关闭的钩子,在进程关闭时,回收一些资源。Broker 启动的入口为 broker 模块的。判断是否创建成功,如果创建失败,就尝试关闭。原创 2023-12-18 09:50:57 · 1049 阅读 · 0 评论 -
RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及事务消息收发、最大重试消费实战
文章目录事务消息收发最大重试消费事务消息收发流程如下:发送给 MQ 一条任务操作MQ 的 Broker 成功收到后,那么发送方就开始执行原子 db 业务如果执行原子 db 业务失败,并没有将执行成功状态同步给 Broker那么 Broker 会去检查 db 事务是否成功,最后要么事务提交,可以被生产者消费,要么事务回滚,生产者无法消费事务消息收发流程图如下:事务消息收发消费者如下:public class TransactionConsumer { public stati原创 2023-12-18 09:50:33 · 495 阅读 · 0 评论 -
RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及批量发送消息、消息过滤实战
如果同一个消费者组中的两个消费者订阅了不同的 Tag,比如消费者 A 订阅了 Tag1,消费者 B 订阅了 Tag2,那么可能 B 收到了 Tag1 的数据,发现不是自己想要的,于是将 Tag1 的数据过滤掉了,那么就导致了 A 也收不到 Tag1 的数据,造成数据消失的现象。批量发送消息可以减少网络的 IO 开销,让多个消息通过 1 次网络开销就可以发送,提升数据发送的吞吐量。消费者组中还可以有过滤操作,对同一个 Topic 下的消息的 Tag 标签进行过滤。但是使用消息过滤时需要。原创 2023-12-17 12:36:32 · 724 阅读 · 0 评论 -
RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消息追踪、延时消息实战
上边的案例使用了 SpringCloudStream 的 API 进行消息的收发,这里使用原生 API 进行消息收发实战,通过设置消息的延时时间,可以让消息等待指定时间之后再发送。由于这里引入的 SpringCloudAlibaba 整合的 RocketMQ 是 4.9.4 版本的,因此只能设置固定时间的延时消息。延时时间有以下几种,通过 Leven 进行定位,如果。5.x 之后,可以自定义任意时间的延时消息。5.x 之前,只能设置固定时间的延时消息。在发送消息的时候,指定消息的。原创 2023-12-17 12:33:51 · 590 阅读 · 0 评论 -
RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及顺序消费实战
通过创建一个 topic,并且该 topic 下只有一个队列,那么生产者向着一个队列中发消息,消费者也在这一个队列中消费消息,来保证消息的有序性。局部有序:适用于对性能要求比较高的场景,在设计层面将需要保证有序的消息放在 Topic 下的同一个队列即可保证有序。要保证全局有序的话,我们先通过上边启动的 Dashboard 项目,创建一个只有一个队列的 Topic。都设置为 1 个,perm 设置为6(perm,2:只写;先启动消费者,再启动生产者,即可看到在消费者端,消息被有序消费。原创 2023-12-16 15:21:04 · 631 阅读 · 0 评论 -
RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及消费收发实战
因此,SpringCloud 出现的宗旨就是简化 SpringBoot 集成第三方框架的过程,SpringCloud 内置集成了很多第三方插件,但是 SpringCloud 前期很重的依赖了 Netflix 组件, 但是 Netflix 组件不再维护了。首先,项目引入 SpringCloud、SpringCloudAlibaba 依赖和 RocketMQ 依赖,之后项目都引入该依赖即可使用 RocketMQ。在 localhost:8080 即可访问 Dashboard。首先新建一个项目,引入上边依赖。原创 2023-12-16 15:19:44 · 1420 阅读 · 0 评论 -
RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装
Message Queue:一个 Topic 下可以设置多个消息队列,发送消息的时候,RocketMQ 会轮询该 Topic 下的所有队列将消息发送出去(下图中 Broker 中 Topic 指向的 Q1、Q2、Q3、Q4 就是 MessageQueue)MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic 下有 4 个队列被分配出来存储消息。Broker:Broker 是 Rocket MQ 的主要角色,主要管理消息的存储、发送、查询等功能。原创 2023-12-15 23:26:10 · 1082 阅读 · 0 评论