阅读本文大约需要 20 分钟。
大家好,我是 华仔, 又跟大家见面了。
随着微服务技术的兴起,消息中间件作为「现代技术架构」中不可或缺的一部分,应用相当广泛。正是因为这样,各大厂都在相继自研消息队列,比如最初来自 LinkedIn 的 Kafka、阿里的 RocketMQ、以及 Yahoo 的 Pulsar,都是业界主流的消息中间件。
那么为什么要选择学习 RocketMQ 呢?
这里给出四个优点:
1、 语言优势:首先 RocketMQ 使用 Java 语言开发,对比 Erlang 开发的 RabbitMQ,更容易上手阅读、体验。在遇到 RocketMQ 底层的问题时,大部分熟悉 Java 的同学都可以深入阅读其源码,分析、排查问题,甚至可以进行二次开发。
2、 丰富的高级特性:从 RocketMQ 官方文档 https://rocketmq.apache.org/zh/ 来看,高级特性达到了 12 种,例如「普通消息」、「顺序消息」、「事务消息」、「消息过滤」、「定时/延时消息」、「消息重试」等,这些特性后续都会进行讲解。其丰富的特性,能够为我们在复杂的业务场景下尽可能多地提供思路及解决方案。
3、 商业前景良好:RocketMQ 不仅解决了阿里的内部需求,同时还被搬到了阿里云上,作为一个商业化的产品对外提供服务。如今 RocketMQ 商业化版已经具有相当大的规模。良好的商业前景,也推动着 RocketMQ 在业界的普及。
4、 阿里背书:历年来大家所熟悉的双十一大促,在阿里内部就是使用的 RocketMQ 来承载消息,面对如此庞大的「流量洪峰」,RocketMQ 表现非常令人满意。另外 RocketMQ 也是阿里「交易链路」中的核心产品。交易链路本已是核心中的核心,而这个核心又将 RocketMQ 当作核心链路中的核心,足以见对 RocketMQ 的重视程度。
如果大家对 RocketMQ 感兴趣,可以来我的知识星球,专注消息中间件方向,文末有最低优惠券,下面开始正题。
欢迎加入华仔的星球,你将获得: 专属的中间件专栏 / 1v1 提问 / 简历修改指导/ 学习打卡 / 每月赠书 / 社群讨论
《从四大维度开始带你精通 RocketMQ》 已爆肝完毕,基于 RocketMQ 5.1.2 版本进行源码讲解。 《从四大维度开始带你精通 Kafka》 已爆肝完毕,基于 Kafka 2.8 以及 3.x 版本进行源码讲解。 截止目前,累计输出 500w+ 字,讲解图 2000+ 张,还在持续爆肝中.. 后续还会上新更多项目和专栏,目标是打造地表最强中间件星球,戳我加入学习,已有440+小伙伴加入,电商实战项目火热更新中,结束时会有简历指导包装,需要的抓紧来。
这里说几点,解答一些疑惑,可以认真看下:
1、星球内容只会越来越完善,价格越来越贵,一年时间从69元开始发售到现在已经涨到了199元,现特惠期间只需 169元(送两个技术小册,只需 120 元),还会继续涨价,所以需要抓紧来,越早越受益,别错过。
2、只筛选认可且支持我的老铁,我不喜欢白嫖怪,尊重别人就是尊重自己。
3、对于星球年费说下,只是到期后新内容看不到,已经更完的内容相当于一次付费永久看,所以认可我内容的可以放心来,有疑问文末加我好友进行答疑。
4、除专栏外,我会提供专属的一对一答疑服务,包括不限于工作中、专栏中遇到的问题,简历修改指导、职业规划服务等。这也是星球的特色服务。
这篇我们来聊聊我是如何一步步学习 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 核心架构设计。
后面我会基于 RocketMQ 最新版本 「5.3.1」来剖析一些新架构模式下的底层源码实现,目前已经更新了一部分内容。
比如:
分层存储架构原理设计与源码实现。
类似 Kafka 中批次消息原理设计与源码实现。
Controller 模式架构原理设计与源码实现。
Slave Acting Master 模式架构原理设计与源码实现。
RocketMQ 5.x 底层 Rocksdb 架构原理设计与源码实现。
RocketMQ 5.x 消费者 cold 限流策略架构设计与源码实现。
等等
已更内容如下:
03 总结
所以授人以鱼不如授人以渔。掌握好「高效的学习方法」、「清晰的学习思路」能够让我们在学习道路上事半功倍。相信等本系列更新完毕后,你也能够沉淀、掌握出自己的一套学习心得,并且在以后的学习道路不断地改进,精益求精。
最后希望大家都可以成为消息中间件的高手,如果感兴趣可以扫码加入我的知识星球。
从此刻起前 20 名加入星球的老铁,免费送下面两个技术小册,文末加我好友兑换福利(到手只需 120 元,历史最低价。20名之后的两个小册二选一,已有的可以用其他小册替换)。 关于星球介绍点击: 超 500 万字详解,从零到一带你彻底吃透 Kafka + RocketMQ 小红书实战
需要续费的扫这个,优惠25元,每个月只有 10 张优惠券, 错过只能等下个月。
另外必须要注意的是上车的老铁一定要加我微信 好友,拉你们加入星球专属交流群。