写点什么

阿里专家分享内部绝密 RocketMQ 核心原理与最佳实践 PDF

发布于: 1 小时前
阿里专家分享内部绝密RocketMQ核心原理与最佳实践PDF

前言

本文源码以 RocketMQ 4.2.0 和 RocketMQ 4.3.0 为 基 础 , 从 RocketMQ 的实际使用到 RocketMQ 的源码分析,再到 RocketMQ 企业落地实践方案,逐步讲解。使读者由浅入深地了解 RocketMQ。

本文在源码分析过程中,先讲整体流程,再按模块、步骤进行详细讲解,希望读者在阅读时能举一反三,能知其然且知其所以然。

本文总共九章,分为五部分,第一部分讲解消息队列入门和 RocketMQ 生产、消费原理与最佳实践;第二部分从整体角度讲解 RocketMQ 架构;第三部分讲解 RocketMQ 各个组件的基本原理;第四部分深入 RocketMQ,讲解如何阅读源代码、如何进行企业实践;第五部分是附录,包含 Namesrv、Broker 的核心参数配置说明和 Exporter 监控指标注释。


目录


主要内容

第 1 章 RoketMQ 综述;

  • 1.1 什么是消息队列,消息队列(Message Queue),从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的软件系统。

  • 1.2 为什么需要消息队列,通过上一节的讲解,相信读者对消息队列有了一个初步的认识,那么我们平时什么时候可能会用到消息队列呢?

  • 1.3 常见消息队列,

  • 1.4 RocketMQ 的发展史与未来,Apache RocketMQ 是一款开源的、分布式的消息投递与流数据平台。出生自阿里巴巴,在阿里巴巴内部经历了 3 个版本后,作为 Apache 顶级开源项目之一直到现在。在 GitHub 上有 10000+star、5000+fork、170+contributors(在 GitHub 上提交代码并被采纳的开发者),目前的最新版本是 2020 年 3 月的 4.7.0 版本。本节主要介绍 RocketMQ 的产生和成长过程。


第 2 章 RocketMQ 的生产者原理和最佳实践;

  • 2.1 生产者原理,通过第 1 章的讲解,相信读者对 RocketMQ 有了一个基本的认识,本节将对 RocketMQ 中的生产者做基本介绍。

  • 2.2 生产者启动流程,DefaultMQProducer 是 RocketMQ 中默认的生产者实现 ,DefaultMQProducer 的类之间的继承关系,可以看到这个生产者在实现时包含生产者的操作和配置属性,这是典型的类对象设计。本节将介绍类对象的一些核心属性和方法。

  • 2.3 消息发送流程,消息发送流程首先是 RocketMQ 客户端接收业务层消息,然后通过 DefaultMQProducerImpl 发送一个 RPC 请求给 Broker,再由 Broker 处理请求并保存消息。

  • 2.4 发送消息最佳实践,发送普通消息、顺序消息、延迟消息、事务消息、单向消息、批量消息发送。

  • 2.5 生产者最佳实践总结,相对消费者而言,生产者的使用更加简单,一般读者主要关注消息类型、消息发送方法和发送参数,即可正常使用 RocketMQ 发送消息。


    在实际使用时如何选择消息类型和消费发送方法呢?笔者在这里总结了常用的消息类型、消息发送方法、发送基本参数,方便大家参考。


第 3 章 RocketMQ 的消费流程和最佳实践;

  • 3.1 消费者概述,消费者一般指获取消息、转发消息给业务代码处理的一系列代码实现。在 RocketMQ 中,消费行为是如何进行的呢?本节将详细讲述。

  • 3.2 消费者启动机制,RocketMQ 客户端中有两个独立的消费者实现类 :org.apache.rocketmq.client.consumer.DefaultMQPullConsumer 和 org.apache.rocketmq.client.consumer.DefaultMQPushConsumer 。 下面将分别进行介绍。

  • 3.3 消费者的 Rebalance 机制,客户端是通过 Rebalance 服务做到高可靠的。当发生 Broker 掉线、消费者实例掉线、Topic 扩容等各种突发情况时,消费者组中的消费者实例是怎么重平衡,以支持全部队列的正常消费的呢?

  • 3.4 消费进度保存机制,在消费者启动时会同时启动位点管理器,那么位点具体是怎么管理的呢?RocketMQ 设计了远程位点管理和本地位点管理两种位点管理方式。集群消费时,位点由客户端提交给 Broker 保存,具体实现代码在 RemoteBrokerOffsetStore.java 文件中;广播消费时 ,位 点 保 存在消费者本地磁盘上 , 实现代码在 LocalFileOffsetStore.java 文件中。

  • 3.5 消费方式,RocketMQ 的消费方式包含 Pull 和 Push 两种。Pull 方式:用户主动 Pull 消息,自主管理位点,可以灵活地掌控消费进度和消费速度,适合流计算、消费特别耗时等特殊的消费场景。


    缺点也显而易见,需要从代码层面精准地控制消费,对开发人员有一定要求。在 RocketMQ 中 org.apache.rocketmq.client.consumer.DefaultMQPullConsumer 是 默认的 Pull 消费者实现类。Push 方式:代码接入非常简单,适合大部分业务场景。缺点是灵活度差,在了解其消费原理后,排查消费问题方可简单快捷。在 RocketMQ 中 org.apache.rocketmq.client.consumer.DefaultMQPushConsumer 是 默认的 Push 消费者实现类。

  • 3.6 消息过滤

  • 3.7 消费者最佳实践总结,本章主要介绍了消费流程和消费者原理、过滤器的设计和执行过程。Pull 和 Push 在使用中有两点特别需要注意:订阅关系不一致和不能消费时怎么排查,这里分享一下笔者在实践过程中的经验。


第 4 章 RocketMQ 架构和部署最佳实践;

4.1 RocketMQ 架构,RocketMQ 不单单是一个技术,它还是一个体系。

4.2 常用的部署拓扑和部署实践,常用的 RocketMQ 的部署拓扑方式有 5 种,不同的部署方式可靠性不同,大家在公司落地部署时,可以根据企业业务的需求进行选择,或者有新的部署方式也可以分享给笔者和 RocketMQ 社区。


第 5 章 Namesrv;

  • 5.1 Namesrv 概述,Namesrv 在 RocketMQ 体系中主要用于保存元数据、提高 Broker 的可用性。


    在 RPC 通信中,我们通常将服务提供者称为服务端,使用服务的端称为客户端。如果服务端有扩容或缩容,客户端如何感知呢?业内常用的做法是,服务注册与发现。通过注册,可以添加更多提供服务的服务端实例,当然有实例宕机,也可以通过摘除来保证服务的可靠性。Broker 作为 RocketMQ 服务的提供者,其工作原理也是一样的。

  • 5.2 Namesrv 架构,Namesrv 组件,Namesrv 启动流程,Namesrv 停止流程;

  • 5.3 RocketMQ 的路由原理,生产者发送消息、消费者消费消息时都需要从 Namesrv 拉取 Topic 路由信息,那么这些路由信息是如何注册到 Namesrv 的呢?如果 Broker 异常宕机,路由信息又是如何更新的呢?


    下面,我们通过路由注册和路由剔除两个方面进行详细讲解。


第 6 章 Broker 存储机制;

  • 6.1 Broker 概述,本章主要讲解了 Broker 的基本知识,以及 Broker 在体系中所处的地位。带领读者从部署结果上看 Broker 的各个文件目录结构,为下一章学习存储模块打下基础。本章的核心内容有:● Broker 在 RocketMQ 体系中所处的地位。● Broker 的数据目录结构。● Broker 的启动和停止流程。

  • 6.2 Broker 存储机制,堆积能力是消息队列的一个重要考核指标。存储机制是 RocketMQ 中的核心,也是亮点设计,因为存储机制决定写入和查询的效率。

  • 6.3 Broker CommitLog 索引机制,绝大部分存储组件都有索引机制,RocketMQ 也一样,有巨量堆积能力的同时,通过索引可以加快读取和查询。


    本节主要讲解 RocketMQ 的 ConsumeQueue 和 IndexFile 两种索引的基本原理:● 索引的数据结构。● 索引的构建过程。● 索引如何使用。

  • 6.4 Brokeri 过期文件删除机制,RocketMQ 中主要保存了 CommitLog、Consume Queue、Index File 三种数据文件。由于内存和磁盘都是有限的资源,Broker 不可能永久地保存所有数据,所以一些超过保存期限的数据会被定期删除。RocketMQ 通过设置数据过期时间来删除额外的数据文件,具体的实现逻辑是通过 org.apache.rocketmq.store.DefaultMessageStore.start()方法启动的周期性执行方法 DefaultMessageStore.this.cleanFilesPeriodically()来实现的。

  • 6.5 Broker 主从同步机制,当前主流的分布式组件中,可用性都是必备的。本节主要讲 RocketMQ 中可用性的设计和实现方式,主要内容有如下两个方面:● 主从同步介绍。● 主从同步流程。

  • 6.6 Broker 的关机恢复机制,可靠性也是当前主流分布式产品的必备特性之一,对于一个金融级可靠的消息队列组件来讲更是如此。本节主要讲解内容如下:● 关机恢复机制的相关文件和实现原理。● 关机恢复机制的恢复过程。


第 7 章 RocketMQ 特性——事务消息与延迟消息机制;

  • 7.1 事务消息概述,事务消息的实现方案目前主要分为两种:两阶段提交方案和三阶段提交方案。RocketMQ 采取了两阶段提交的方案进行实现,事务消息的代码讲解基于 4.3.0 版本。

  • 7.2 事务消息机制,我们将事务消息的发送和处理总结为四个过程:生产者发送事务消息和执行本地事务、Broker 存储事务消息、Broker 回查事务消息、Broker 提交或回滚事务消息。接下来,我们对这四个过程进行详细讲解。

  • 7.3 延迟消息概述,什么是延迟消息呢?延迟消息也叫定时消息,一般地,生产者在发送消息后,消费者希望在指定的一段时间后再消费。常规做法是,把信息存储在数据库中,使用定时任务扫描,符合条件的数据再发送给消费者。下面通过一个春节买票的场景来进行讲解。

  • 7.4 延迟消息机制,在 RocketMQ 4.3.0 支持延迟消息前,开源版本 RocketMQ 延迟消息机制就是一个谜,本节将基于 RocketMQ 4.3.0 为大家揭秘延迟消息的存储和投递机制。


第 8 章 RocketMQ 源代码阅读;

  • 8.1 RocketMQ 源代码结构概述,Apache RocketMQ 项目是一个基于 maven 构建的多模块 Java 项目,将源代码导入 IntelliJ IDEA;

  • 8.2 RocketMQ 源代码编译;

  • 8.3 如何阅读源代码,

  • 8.4 源代码阅读范例:通过消息 id 查询消息,在 RocketMQ Console 中,我们发现可以通过消息 id 查询消息体内容,接下来我们看看具体是怎么查询的,


第 9 章 RocketMQ 企业最佳实践;

  • 9.1 RocketMQ 落地概述,

  • 9.2 RocketMQ 集群管理,Topic 管理是集群管理中常见的操作,包括创建 Topic、查看 Topic 路由、修改 Topic 配置、重置消费位点。在上一节中主要讲解了如何管理 Topic,本节主要讲解如何管理消费者。通常消费者管理就是指消费者组管理和消费者实例管理,关于消费者组和消费者实例的相关概念在第 4 章已做详细描述。

  • 9.3 RocketMQ 集群监控和报警,对于 RocketMQ 的监控分为硬件监控和软件监控。硬件监控一般是机器内存使用率、CPU 使用率、磁盘使用率等主机监控;软件监控是 Namesrv、Broker、客户端生产、消费的指标数据监控和报警。一般运维的读者会默认添加主机监控,这里笔者主要介绍基于 Prometheus 的软件监控和报警。

  • 9.4 RocketMQ 集群迁移,RocketMQ 的集群迁移特指 Namesrv、Broker 的迁移。一般企业需求需要满足两点:对研发透明、消息不丢失。Namesrv 机器之间因为是无状态的,所以迁移相对简单,在这里我们主要介绍如何迁移 Broker 集群。


    Broker 集群迁移可以采用 Topic 扩容的方式进行。具体的迁移过程笔者总结为

  • 9.5 RocketMQ 测试环境实践 9.6 RocketMQ 接入实践,为什么需要单独讲测试环境呢?消息队列中间件的最终用户都是公司的研发人员,测试环境也是研发使用最频繁的环境,自然也是问题最多的。测试环境为了研发人员方便会有多个子环境,这与 RocketMQ 中订阅关系必须保持一致的规则相冲突,导致不同环境的消费者“抢消费”的情况发生。本节我们主要讲一下“抢消费”问题。


这份【RocketMQ 分布式消息中间件:核心原理与最佳实践】PDF 共有 365 页,需要完整版的小伙伴,可以转发此文关注小编,**点击这里,获得文档领取方式**

希望读者在平时的工作中能熟悉、借鉴、参考 RocketMQ 的优秀设计理念,在技术能力上更进一步,在工作中更好地服务公司。

用户头像

还未添加个人签名 2020.09.25 加入

还未添加个人简介

评论

发布
暂无评论
阿里专家分享内部绝密RocketMQ核心原理与最佳实践PDF