阅读本文大约需要 20 分钟。
大家好,我是 华仔, 又跟大家见面了。
这是一篇星球 RocketMQ 专栏的内容,分享给大家,如果大家对 RocketMQ 感兴趣,可以考虑我们星球,专注消息中间件方向,文末有优惠券,下面开始正题。
欢迎加入华仔的星球,你将获得: 专属的中间件专栏 / 1v1 提问 / 简历修改指导/ 学习打卡 / 每月赠书 / 社群讨论
《从四大维度开始带你精通 RocketMQ》 即将爆肝完毕,基于 RocketMQ 5.1.2 版本进行源码讲解。 《从四大维度开始带你精通 Kafka》 已完结。 截止目前,累计输出 500w+ 字,讲解图 2000+ 张,还在持续爆肝中.. 后续还会上新更多项目和专栏,目标是打造地表最强中间件星球,戳我加入学习,已有380+小伙伴加入。
这篇我们来聊聊我是如何一步步学习 RocketMQ 的,尽量做到授人之渔。这里的学习方法当然也适合于 Kafka 或者其他中间件。

01 真知之我见
不知道大家有没有这样的一种感受:八股文背多了感觉自己什么都会了,但是如果从来没有进行实战过,深挖细节后还是什么都不会,所以「纸上得来终觉浅,绝知此事要躬行」。
消息中间件作为我们「后端系统」尤其是「高并发系统」最重要的一个环节,必定是我们要深入学习的重点。但有时候受到自己所在平台的限制,日常工作中无法接触到主流的技术,比如:公司业务缺乏高并发、压根也就没有接触过消息中间件,此时该怎么办?
个人建议:如果在工作中实在无法应用时,这里我建议大家平时还是多去研究「主流技术」的「应用实战」、「底层原理」、甚至要「深入源码」,为后续使用做好充分准备,不要因为没有接触到而放弃学习,「机会永远是留给有准备的人」,如果你对某一项技术研究有一定深度时,当项目中需要使用时,你就可以立马展示自己的才华,也能让自己更快的脱颖而出。
我个人在去好未来之前在实际工作中并没有接触过任何一款消息中间件,更别谈怎么使用了,后来机缘巧合的去了好未来的时候,业务上大量使用 Kafka 来解耦上下游系统,也遇到过很多生产级问题或者故障,所以就开始在公众号进行总结和分享关于 Kafka 底层原理的干货文章,后续在星球将整个 Kafka 系列专栏更新完,也让自己慢慢对其有了更深的认知。
另外对于 RocketMQ,当时就是听说它支撑了阿里双十一的巨大流量和海量数据,让我产生了浓厚的兴趣,也想目睹这样一款工业级高性能分布式消息中间件的风采,后来在上家公司业务中更多的使用了 RocketMQ 后,从此踏上了深入研究 RocketMQ 的征程。
那么我们该如何来学习 RocketMQ 呢?
02 学习方法
2.1 通读官方手册
通常我们开始学习一个工业级软件时,建议大家首先去官网查看其设计手册,从而对该软件能够解决什么问题,其内部的工作原理、都包含了哪些知识点,最后从全局上掌握它。
我们都知道早期的 RocketMQ 是参考 Kafka 来设计的,后来又重写了整个底层,也慢慢摒弃了 Kafka 的一些缺点。所以 Kafka 拥有的高性能架构设计理念在 RocketMQ 中都有,比如:
拥有亿级消息堆积能力。
基于文件编程的设计理念、内存映射、pagecache。
零拷贝机制。
日志同步刷盘、异步刷盘。同步复制、异步复制。
-
并发编程,高性能网络编程等。
看过其设计手册后,让我产生了浓厚的兴趣,一定要下决心深入研究 RocketMQ 的工作原理与底层实现细节,另外更要从源码角度对其进行深入研究。
2.2 入门实战
等对设计手册简单了解后,我建议大家先通过官网下载其安装包,可以本地或者阿里云先搭建其环境。
熟悉其内部命令,包括「启停方式」,「配置文件参数」、「简单消息生存以及消费」等。
安装可视化控制台如:rocketmq-console,了解其功能以及使用方法。
如果手头富裕,可以多搞几台机器尝试搭建一个集群。了解集群原理以及部署方式。
自己基于 Springboot 或者 Gin、Laravel 等不同语言框架来集成 RocketMQ,然后简单的进行生产者和消费者示例,并运行。
-
然后再对其重要功能特性(https://rocketmq.apache.org/zh/docs/)进行专项练习,重点掌握。如下:

2.3 深入底层原理
这里我们可以分模块来逐步「层层拨雾」,主要分为以下几个模块:
生产者、消费者。
Broker 普通主从架构、Dledger 主从架构原理。
NameServer 架构原理。
超高并发网络架构原理。
ACL 机制架构设计。
消息轨迹架构设计。
事务消息架构设计。
延迟消息架构设计。
消息丢失解决方案。
-
RocketMQ 5.0 架构设计等等。

2.4 下载源码,跑通其 demo
对于每一个开源软件来说,都会提供完备的测试案例,RocketMQ 当然也不例外,在其源码目录中有一个单独模块 example,里面放了很多使用 Demo,可以按需先运行一些测试用例,能让你掌握 RocketMQ 的基本使用。
2.5 深入研究源码
通过上面几个步骤,我相信你已经对其设计原理有了一个全局的理解,同时掌握了 RocketMQ 的基本使用,接下来需要深入研究 RocketMQ 源码。
通过研读其源码,可以让你在生产出现故障时,可以快速定位问题并快速止血。更重要的是你能够提前进行预判风险,避免生产故障发生。要做到这一点,成体系化的研究就显得非常必要了。
另外学习优秀的 RocketMQ 工业级源码,能力提升我们的编程技能,例如高并发、基于文件编程相关的技巧,我们都可以从中得到一些启发。
那么我们如何来阅读 RocketMQ 源码呢?
建议在阅读 RokcetMQ 源码之前,我希望大家需要具备一定的基础,先尝试阅读一下 Java 数据结构相关的源码,例如「HashMap」 、「ArrayList」、「CountDownLatch」、「CompletableFuture」等等,主要是培养自己阅读源码的方法,通常我阅读源码的方法:「先研究主流程」、「后研究分支流程」,建议大家不要深陷入细节中,抓大放小。
当你发现源码的调用链路越来越深,嵌套也越来越复杂时,你不妨先按停下来。根据函数的命名,「连蒙带猜」地告诉自己,这个地方就是在做某种操作的,此时你没有更多的上下文,因此暂停继续深入、接着往下阅读,往往能为你提供「更多上下文」信息。
最后说一下我们在学习某个模块时是如何研究的:比如在学习生产者发送消息流程时,我只会「关注消息发送到客户的流程」,对于服务端是如何接收、存储、复制、刷盘的暂时先不关注,等我们弄明白了消息发送到客户端的架构设计,然后再去研究服务端接收消息发送请求时会做哪些操作,然后再逐步研究「消息存储」、「消息刷盘」、「消息复制」等机制,这样你就能有条理的,逐个来突破 RocketMQ 核心架构设计。

03 总结
所以授人以鱼不如授人以渔。掌握好「高效的学习方法」、「清晰的学习思路」能够让我们在学习道路上事半功倍。相信等本系列更新完毕后,你也能够沉淀、掌握出自己的一套学习心得,并且在以后的学习道路不断地改进,精益求精。
最后希望大家都可以成为消息中间件的高手,如果感兴趣可以扫码加入我的知识星球。
加入星球的会赠送老徐的副业避坑星球(价值 139),还会送我的副业陪伴群一年(价值 39.9),相当于免费加入我的技术星球。 需要的加入后文末加我好友来领取福利。
(副业是未来必须要做的事情, 可以趁现在早点布局) 需要续费的扫这个,优惠10元,目前续费价 104.5 ,一定要在涨价前续完,否则多花一笔钱
另外必须要注意的是上车的老铁一定要加我微信 好友,拉你们加入星球专属交流群。
最后最后推荐下四个不错的产品,感兴趣的可以 上车了,这里只吸引同频的人,如果加入几分钟 就直接退出的就不要来了,浪费我的名额。 第一个来自三哥的小报童,仅需 15 元,马上涨 价了,需要的可以扫码加入。
第二个是右导的《中小程序员生存指南》,
仅需 10 元。
他的这个专栏包含:技术、面试、副业,非常
值得一看。
强烈推荐大家看一看,或许对你的整个职业生
涯都有启发。
第三个是右导的《阿里P9:20年职业50个思考与洞察》,
仅需 29.9 元。
他的这个专栏包含:技术、面试、职场、晋升、
管理、职业生涯,什么都有,非常值得一看。
强烈推荐大家看一看,或许对你的整个职业生
涯都有启发。






