朋友新书,老梁参与审稿,当当网5折优惠
共 7491字,需浏览 15分钟
·
2021-10-25 11:16
《RocketMQ技术内幕》第二版上市啦,当当网5折优惠,更有满200送50,满300送80的优惠活动,活动直达海报:
随着互联网技术的蓬勃发展和微服务架构的普遍应用,加上大数据分析及高并发流量场景的复杂度越来越高,系统架构开始追求小型化、轻量化,为此我们也需要拥有高性能、高可用、低延迟、支持顺序、支持容错、支持事务等功能的消息中间件来支撑互联网高速发展。目前,RPC、服务治理、分布式、消息中间件已经成为互联网架构的标配。
引入消息中间件后,服务之间就可以通过可靠的异步调用来降低系统之间的耦合度,提高系统的可用性。消息中间件具有高效的消息处理能力,可以让系统承接大数据量的并发及流量脉冲而不被击垮,在保证性能的同时改善了用户体验。此外,消息中间件还可以解决系统之间数据的一致性(最终一致性)问题。
RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,承载了阿里“双11”的大部分业务,可以说是一名久经战场的“精英”、值得信任的“伙伴”。它采用 Java作为开发语言,自然而然得到了广大互联网架构师的青睐,并成为互联网行业首选的消息中间件。
初次接触RocketMQ是在听到它被阿里巴巴正式捐献给Apache基金会,成为Apache的顶级开源项目时。这意味着承载阿里“双11”巨大流量的消息中间件完全开源,对广大Java开发者来说无疑是一个巨大的利好,让我们有机会一睹高性能消息中间件RocketMQ的“真容”。作为一名阿里技术崇拜者,我内心异常激动,于是不假思索地在CSDN上开通了专栏“源码研究RocketMQ”,并受到了广大技术爱好者的支持。
RocketMQ作为一款高性能消息中间件,其核心优势是可靠的消息存储、高性能且低延迟的消息发送、强大的消息堆积能力与消息处理能力、严格的顺序消息模式等。RocketMQ的另一个核心优势是懂得取舍。软件设计不可能做到面面俱到,消息中间件的理想状态是一条消息能且只能被消费一次,要做到这一点,必然需要牺牲性能。
RocketMQ的设计者解决这一难题的办法是不去解决,即保证消息至少被消费一次,但不承诺消息不会被消费者多次消费,其消费的幂等由消费者实现,从而极大地简化了实现内核,提高了RocketMQ的整体性能。RocketMQ被捐献给Apache基金会后一直在快速发展,相关OpenMessaging 的标准也已经发布。
想要深入了解RocketMQ,欢迎阅读新出版的《RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)》一书。本书的写作目的是与各位读者探讨RocketMQ的实现原理,帮助读者更好地在实际项目中应用 RocketMQ。
本书从源码的角度对RocketMQ的实现原理进行详细剖析。作为一本源码阅读类图书,本书的讲解切入点并不是组成RocketMQ的一个个源码包,而是功能模块(如topic路由中心、消息发送、消息存储、消息消费、事务消息),这样更加贴近实战需求。
01
本书特色
NO.1 作者经验丰富
作者是RocketMQ社区的早期布道师和RocketMQ官方评选的“优秀布道师”,有大量实战经验的中通和圆通的资深架构专家。
NO.2 RocketMQ官方推荐
RocketMQ官方推荐:RocketMQ创始人/Alibaba Messaging开源技术负责人/Linux OpenMessaging创始人高度评价并作序推荐。
NO.3 畅销书全新升级
第1版广获好评,成为RocketMQ领域标志性作品,第2版在源码分析的基础上增加了丰富的图文总结,同时在核心功能解读及使用技巧方面做了重大更新。
NO.4 全方位剖析源码
从源码角度分析RocketMQ的技术架构以及消息发送、消息存储、消息消费、消息过滤、顺序消息、主从同步、事务消息等的实现原理。
NO.5 以用好RocketMQ为导向
揭示RocketMQ高性能、高可用、高吞吐量、低延迟的秘密。
02
本书主要内容
这是一本指导读者如何在实践中让RocketMQ实现高性能、高可用、高吞吐量和低延迟的著作。
全书一共11章,分为3个部分
第一部分准备篇(第1章)
简单介绍了RocketMQ的设计理念与目标,以及阅读RocketMQ源码的方法与技巧;
第二部分实现篇(第2~9 章)
从源码角度对RocketMQ的技术架构以及消息发送、消息存储、消息消费、消息过滤、顺序消息、主从同步、事务消息等主要功能模块的实现原理进行了深入分析;
第三部分实例篇(第10~11 章)
首先从实战的角度讲了RocketMQ监控的原理、实现和应用,然后通过各种类型的大量示例展示了RocketMQ的使用技巧。
03
读者对象
本书适合以下几类读者阅读:
RocketMQ的用户和爱好者;
RocketMQ代码开发志愿者;
Java中高级开发工程师;
Java架构师;
Java开源相关技术人员。
04
第2版的更新要点
NO.1
结合RocketMQ最新版本进行全面更新;
NO.2
优化了整体的章节结构;
NO.3
新增消息轨迹、ACL、主从切换、同步双写等新内容的解读;
NO.4
在每章前增加了逻辑架构图,结合图阐述工作原理;
NO.5
对重点内容增加了流程图和补充说明,便于理解;
NO.6
删除了FilterServer,增加了RocketMQ监控,内容更加精简。
05
作者简介
丁威
中间件技术专家,资深RocketMQ技术专家,曾获RocketMQ官方颁发的“优秀布道师”称号。
现担任中通快递技术平台部资深架构师,主要负责全链路压测、消息中间件、数据同步等产品的研发与落地,拥有千亿级消息集群的运维经验,不仅实践经验丰富,而且对RocketMQ的源码有深入、系统的研究。
热衷于中间件领域的技术分享,荣获“CSDN 2020博客之星”等荣誉称号,维护“中间件兴趣圈”,更多精彩内容,可以关注公众号。
张登
专家级架构师,资深RocketMQ技术专家,在分布式系统架构领域有丰富的实战经验,擅长高并发系统的架构设计与调优,主导过多家快递公司EA规划。
曾就职于拼多多、德邦等公司,现任圆通科技公司技术平台部架构负责人,负责开发框架的搭建、中间件及混合云相关技术的平台化建设。主导设计过消息分发、API网关、全链路监控、分布式文件存储等多个涉及百亿级规模的基础服务平台。
“IT巅峰技术”公众号维护者,RocketMQ上海社区联合创始人。
周继锋
资深RocketMQ技术专家,知名开源分布式数据库中间件Mycat负责人。
拥有10余年大型项目架构设计及实战经验,曾主导过大量分布式、微服务、大数据相关的项目。在高并发、高可用、高可扩展性、高可维护性等领域有丰富经验,对Hadoop、Spark的源码进行过深度分析并具有丰富的实战经验。
曾在医学、互联网,SAAS行业担任资深架构师、技术总监等职务。现任炼数成金高级讲师,广州鼎牛网络、金石数字创始人。
06
专家推荐
RocketMQ创始人/Linux OpenMessaging主席冯嘉作序推荐,众多技术专家联名推荐
丁威在中通负责消息中间件项目,结合中通千亿级别的消息流转场景,以实战为目标对RocketMQ源码进行了深入研究,对RocketMQ的设计形成了独到见解。本书对于想深入学习RocketMQ的读者,将会有很大的帮助。
——肖文科 中通科技技术中台负责人
本书第1版帮助无数用户走进了RocketMQ的大门,第2版不仅增加了对Raft存储、同步双写、消息轨迹等核心特性的解读,还增加了丁威维护线上超大规模集群的经验总结。阅读本书将提升你对云原生架构设计理念的认知。
——杜恒 Apache RocketMQ PMC成员/Linux OpenMessaging TSC成员/阿里云消息专有云及开源生态负责人
第2版的内容更加充实,从架构设计到技术细节,本书全方位解读了RcoketMQ的实现原理,是一本难得的好书。
——张玉龙 美团技术专家/Dromara开源作者
本书深入浅出地介绍了RocketMQ的工作原理,让读者知其然且知其所以然,逐步掌握RocketMQ的底层工作机制。本书还系统地讲解了RocketMQ的监控手段和监控指标,让读者对RocketMQ的运行情况了然于胸。
——刘建刚 资深消息专家/字节跳动资深工程师
本书从源码角度切入,对RocketMQ的实现原理进行了深度剖析,非常系统地对RocketMQ的设计精髓进行了解密,对于读者更深入地理解 RocketMQ有非常好的指导意义。
——骆俊武 京东零售某业务的机构负责人
源码之前,了无秘密,本书把RocketMQ的源码翻了个底朝天,看透了它的“秘密”。本书抽丝剥茧、层层深入,既有高屋建瓴的总体介绍,又有细致入微的源码分析,帮助读者轻松理解RocketMQ的具体实现,是深入学习RocketMQ的必备资料,强烈推荐!
——刘欣 前IBM架构师/公众号“码农翻身”维护者
07
目录
第1章 阅读源码前的准备1
1.1 获取和调试RocketMQ的源码1
1.1.1 Eclipse获取RocketMQ源码1
1.1.2 Eclipse调试RocketMQ源码8
1.1.3 IntelliJ IDEA获取RocketMQ源码14
1.1.4 IntelliJ IDEA调试RocketMQ源码16
1.2 RocketMQ源码的目录结构23
1.3 RocketMQ的设计理念和设计目标23
1.3.1 设计理念23
1.3.2 设计目标24
1.4 本章小结26
第2章 RocketMQ路由中心NameServer27
2.1 NameServer架构设计27
2.2 NameServer启动流程29
2.3 NameServer路由注册、故障剔除32
2.3.1 路由元信息32
2.3.2 路由注册35
2.3.3 路由删除40
2.3.4 路由发现43
2.4 本章小结44
第3章 RocketMQ消息发送46
3.1 漫谈RocketMQ消息发送46
3.1.1 topic路由机制47
3.1.2 消息发送高可用设计48
3.2 认识RocketMQ消息50
3.3 生产者启动流程51
3.3.1 初识DefaultMQProducer51
3.3.2 消息生产者启动流程54
3.4 消息发送基本流程55
3.4.1 消息长度验证56
3.4.2 查找主题路由信息57
3.4.3 选择消息队列60
3.4.4 消息发送65
3.5 批量消息发送72
3.6 本章小结74
第4章 RocketMQ消息存储75
4.1 存储概要设计75
4.1.1 RocketMQ存储文件的组织方式76
4.1.2 内存映射80
4.1.3 灵活多变的刷盘策略81
4.1.4 transientStorePoolEnable机制82
4.1.5 文件恢复机制82
4.2 初识消息存储83
4.3 消息发送存储流程84
4.4 存储文件组织与内存映射90
4.4.1 MappedFileQueue映射文件队列90
4.4.2 MappedFile内存映射文件92
4.4.3 TransientStorePool99
4.5 RocketMQ存储文件100
4.5.1 CommitLog文件101
4.5.2 ConsumeQueue文件102
4.5.3 Index文件106
4.5.4 checkpoint文件110
4.6 实时更新ConsumeQueue与Index文件111
4.6.1 根据消息更新ConsumeQueue文件113
4.6.2 根据消息更新Index文件114
4.7 ConsumeQueue与Index文件恢复115
4.7.1 Broker正常停止文件恢复118
4.7.2 Broker异常停止文件恢复120
4.8 文件刷盘机制121
4.8.1 Broker同步刷盘122
4.8.2 Broker异步刷盘125
4.9 过期文件删除机制128
4.10 同步双写132
4.11 本章小结136
第5章 RocketMQ消息消费137
5.1 RocketMQ消息消费概述137
5.1.1 消费队列负载机制与重平衡138
5.1.2 并发消费模型139
5.1.3 消息消费进度反馈机制139
5.2 消息消费者初探141
5.3 消费者启动流程143
5.4 消息拉取146
5.4.1 PullMessageService实现机制147
5.4.2 ProcessQueue实现机制149
5.4.3 消息拉取基本流程150
5.5 消息队列负载与重新分布机制167
5.6 消息消费过程175
5.6.1 消息消费176
5.6.2 消息确认180
5.6.3 消费进度管理184
5.7 定时消息机制189
5.7.1 load()方法190
5.7.2 start()方法190
5.7.3 定时调度逻辑192
5.8 消息过滤机制194
5.9 顺序消息199
5.9.1 消息队列负载199
5.9.2 消息拉取200
5.9.3 消息消费201
5.9.4 消息队列锁实现208
5.10 本章小结209
第6章 RocketMQ的ACL210
6.1 什么是ACL210
6.2 如何使用ACL211
6.2.1 Broker端开启ACL211
6.2.2 客户端使用ACL212
6.3 ACL实现原理214
6.3.1 Broker端ACL核心入口214
6.3.2 PlainAccessValidator详解216
6.3.3 PlainPermissionManager详解220
6.3.4 AclClientRPCHook详解228
6.4 本章小结231
第7章 RocketMQ主从同步机制232
7.1 RocketMQ主从同步原理232
7.1.1 HAService整体工作机制233
7.1.2 AcceptSocketService实现原理233
7.1.3 GroupTransferService实现原理235
7.1.4 HAClient实现原理236
7.1.5 HAConnection实现原理239
7.2 RocketMQ读写分离机制245
7.3 RocketMQ元数据同步248
7.3.1 从节点主动同步元数据249
7.3.2 主节点消息拉取主动同步消费进度250
7.4 本章小结251
第8章 RocketMQ消息轨迹252
8.1 消息轨迹的引入目的和使用方法252
8.2 消息轨迹设计原理255
8.2.1 消息轨迹数据格式255
8.2.2 如何采集轨迹数据256
8.2.3 如何存储消息轨迹数据257
8.3 消息轨迹实现原理257
8.3.1 寻找消息轨迹入口257
8.3.2 消息发送轨迹数据259
8.3.3 消息轨迹异步转发实现机制261
8.4 本章小结265
第9章 RocketMQ主从切换266
9.1 主从切换引入目的266
9.2 Raft协议简介267
9.2.1 Leader选举267
9.2.2 日志复制268
9.3 RocketMQ DLedger主从切换之Leader选主269
9.3.1 DLedgerLeaderElector核心类及核心属性270
9.3.2 选举状态管理器初始化271
9.3.3 选举状态机状态流转273
9.3.4 发送投票请求与处理投票请求280
9.3.5 发送心跳包与处理心跳包283
9.4 RocketMQ DLedger主从切换之存储实现288
9.4.1 RocketMQ DLedger核心类及核心属性288
9.4.2 RocketMQ DLedger数据存储协议290
9.4.3 RocketMQ DLedger索引存储协议291
9.5 RocketMQ DLedger主从切换之日志追加291
9.5.1 日志追加流程概述291
9.5.2 判断Push队列是否已满293
9.5.3 Leader节点日志存储293
9.5.4 Leader节点等待从节点日志复制响应ACK298
9.6 RocketMQ DLedger主从切换之日志复制299
9.6.1 日志复制设计理念300
9.6.2 日志复制类设计体系301
9.6.3 日志转发303
9.7 RocketMQ整合DLedger设计技巧与实现原理326
9.7.1 数据存储兼容设计327
9.7.2 数据存储兼容实现原理328
9.7.3 主从切换元数据同步机制337
9.8 RocketMQ主从切换实战344
9.8.1 主从切换核心配置属性344
9.8.2 搭建主从同步环境344
9.8.3 主从同步集群升级到主从切换346
9.9 本章小结350
第10章 RocketMQ监控352
10.1 设计理念352
10.2 实现原理353
10.2.1 监控相关类图353
10.2.2 监控原始数据采集流程355
10.3 监控数据采样机制356
10.3.1 监控数据采样356
10.3.2 根据采样计算统计指标357
10.4 如何采集监控指标359
10.5 监控实战应用360
10.6 本章小结365
第11章 RocketMQ实战366
11.1 消息批量发送366
11.2 消息发送队列自选择367
11.3 消息过滤368
11.3.1 TAG过滤模式368
11.3.2 SQL过滤模式368
11.3.3 类过滤模式369
11.4 事务消息371
11.5 Spring整合RocketMQ375
11.6 Spring Cloud整合RocketMQ376
11.7 RocketMQ监控与运维命令384
11.7.1 搭建RocketMQ监控平台rocketmq-console384
11.7.2 RocketMQ管理命令387
11.8 应用场景分析423
11.9 实战案例424
11.9.1 RocketMQ集群线上故障缩容实战案例424
11.9.2 RocketMQ在线扩容实战427
11.10 本章小结430
附录 A 参数说明431
附录B RocketMQ各版本概述与升级建议436
重要的事情要说两遍,《RocketMQ技术内幕》第二版上市啦,当当网5折优惠,更有满200送50,满300送80的优惠活动,活动直达海报:
一键三连(关注、点赞、留言)是对我最大的鼓励。