简介
RocketMQ业界主流的消息中间件之一,承载公司核心业务消息的流转。对RocketMQ核心原理的理解与最佳实践成了开发与运维同学的必备技能。听很多同学抱怨,在学习中苦于缺少参考资料、遇到问题缺少专家指点、看源码掉入细节耗费大量时间精力、缺乏指引的最佳实践。
我们在使用RocketMQ发送时会碰到System busy、Broker busy,导致发送超时。发生这种现象的背后原理是怎样的?我们有什么解决方案?
一个消费组订阅多个Tag的情况,多个Tag用||分割,在同一个消费组中一个消费者订阅TagA,同一个消费组的另外一个消费者订阅了TagB。请问这么用有什么问题?背后的原理是什么?这种情况在咨询中问的同学很多。
RocketMQ的平稳运行离不开正确的调优、运维、监控、告警。对RocketMQ的治理我们应该从哪里入手?平滑扩所容的正确姿势是怎么样的?监控项的设计应该从哪些方面?
所有这些实战中可能碰到的坑,你都将从本专栏中找到原理讲解和正确使用方式。
专栏详情地址:https://blog.csdn.net/prestigeding/category_10520815.html
专栏亮点
1.作者团队瓷实
由《RocketMQ技术内幕》作者丁威老师执笔编写核心原理和设计思想,讲解通透严谨,核心知识点提供最佳实践代码。
由在消息领域实战多年的梁勇老师负责编写运维实战部分,手把手教你如何做集群压测、调优、平滑运维、监控、告警设计。
两位作者均通读熟悉RocketMQ核心源码、并在消息领域实战多年。
2.实战心得提炼
两位作者将多年的RocketMQ积累心得提炼总结,从原理到代码最佳实践全方位指引。提升学习效率、少走弯路、事半功倍。
3.图文并貌讲解
知识原理讲解采用图文并貌的方式,并将原理穿插道实战中,读者在轻松学习中获取知识,提升学习获得感、成就感。
4.高阶职位进阶
除了能掌握RocketMQ的知识外,你将对RocketMQ背后设计思想深入学习,RocketMQ治理体系的设计了然于胸。成为消息领域的技术专家。
读者将获得什么?
掌握RocketMQ核心原理与实践
掌握RocketMQ集群运维监控技能
掌握RocketMQ编程技巧与设计思想
目标读者
RocketMQ的初学者
JAVA中高级工程师
RocketMQ运维工程师
想成为消息领域技术专家的从业者
作者简介
丁威,《RocketMQ技术内幕》作者、RocketMQ社区优秀布道师、CSDN技术专家,『中间件兴趣圈』公众号维护者,现担任中通快递研发中心资深架构师。
梁勇,哈啰出行高级技术专家,负责服务框架&消息平台,参与了《RocketMQ技术内幕》审稿工作。专注后端中间件方向,在公众号『瓜农老梁』陆续发表80余篇。
作者照片
正面照,设计师将依此为作者设计卡通肖像。
专栏结构
专栏从使用场景入手介绍如何使用RocketMQ,使用过程中遇到什么问题,如何解决这些问题,以及为什么可以这样解决,即原理讲解(图)穿插在实战中。总共分为三个部分:应用篇、运维篇、编程进阶篇。
专栏的设计思路重在强调实战二字,旨在让一位RocketMQ初学者通过对本专栏的学习,快速“打怪升级”,理论与实战结合,成为该领域的佼佼者。专栏共分为应用篇、运维篇、编程技巧篇。
应用篇:介绍如何使用RocketMQ,使用过程中遇到什么问题,如何解决这些问题,以及为什么可以这样解决,即原理讲解(图)穿插在实战中。
运维篇:从运维角度,从对集群的管理方面角度切入,分享日均消息流转千亿级别的运维日常工作。
编程技巧篇:深入学习RocketMQ,不仅能在工作中更好的驾驭RocketMQ,作为一款高性能的分布式消息中间件,在编程方面有很多地方值得我们学习与借鉴,对快速提升编程能力有莫大的好处。
| 部分 | 文章 | 大纲 |
| :-: | — | — |
| 应用篇 | 1、搭建学习环境(准备篇) | 1.1、Linux安装RocketMQ、RocketMQ-Console |
| 1.2、IDEA中安装RocketMQ |
| 2、RocketMQ核心概念扫盲篇 | 2.1、RocketMQ部署架构 |
| 2.2、消息订阅模型 |
| 2.3、事务消息 |
| 2.4、定时消息 |
| 2.5、消息过滤 |
| 3、消息发送API详解与版本变迁说明 | 3.1、消息发送API详解 |
| 3.2、消息发送API简单使用示例 |
| 3.3、消息发送API版本演变说明 |
| 4、结合实际应用场景谈消息发送 | 4.1、消息发送方式 |
| 4.2、队列选择机制 |
| 4.3、RocketMQ Key 的使用场景 |
| 4.4、RocketMQ tag 使用场景 |
| 4.5、RocketMQ msgId 详解 |
| 5、消息发送核心参数与工作原理详解 | 5.1、DefaultMQProducer参数一览 |
| 5.2、ClientConfig参数一览 |
| 5.3、核心参数工作机制与使用建议 |
| 6、消息发送常见错误与解决方案 | 6.1、No route info of this topic |
| 6.2、消息发送超时 |
| 6.3、System busy、Broker busy |
| 7、事务消息使用及方案选型思考 | 7.1、事务消息应用场景 |
| 7.2、RocketMQ事务消息原理 |
| 7.3、事务消息实战 |
| 7.4、事务消息架构思考 |
| 8、消息消费API与版本变迁说明 | 8.1、消息消费类图 |
| 8.2、消息消费API简单使用示例 |
| 8.3、消息消费API版本演变说明 |
| 9、DefaultMQPushConsumer核心参数与工作原理 | 9.1、DefaultMQPushConsumer核心参数一览与内部原理 |
| 9.2、消息消费队列负载算法 |
| 9.3、PUSH模型消息拉取机制 |
| 9.4、消息消费进度提交 |
| 10、DefaultMQPushConsumer使用示例与注意事项 | 10.1、ConsumeFromWhere注意事项 |
| 10.2、基于多机房队列负载算法 |
| 10.3、消费组线程数设置注意事项 |
| 10.4、批量消费注意事项 |
| 10.5、订阅关系不一致导致消息丢失 |
| 10.6、消费者clientId不唯一导致不消费 |
| 11、DefaultLitePullConsumer核心参数与实战 | 11.1、DefaultLitePullConsumer类图 |
| 11.2、DefaultLitePullConsumer简单使用示例 |
| 11.3、Lite Pull与PUSH模式之对比 |
| 11.4、长轮询实现原理 |
| 12、结合实际场景再聊DefaultLitePullConsumer的使用 | 12.1、场景描述图 |
| 12.2、PUSH与PULL模式选型 |
| 12.3、方案设计 |
| 12.4、代码实现与代码解读 |
| 13、结合实际场景顺序消费、消息过滤实战 | 13.1、顺序消费(场景描述、代码实现、原理解读) |
| 13.2、消息过滤实战(场景描述、技术方案、代码实现) |
| 14、消息消费积压问题排查实战 | 14.1、问题描述 |
| 14.2、问题分析与解决方案 |
| 14.3、线程栈分析经验 |
| 14.4、RocketMQ消费端限流机制 |
| 14.5、RocketMQ服务端性能自查技巧 |
| 运维篇 | 15、RocketMQ常用命令实战 | 15.1、集群命令汇总 |
| 15.2、主题命令汇总 |
| 15.3、消费组命令汇总 |
| 15.4、Broker命令汇总 |
| 15.5、消息命令汇总 |
| 16、RocketMQ集群性能摸高 | 16.1、前言 |
| 16.2、压测脚本 |
| 16.3、摸高实战 |
| 16.4、总结 |
| 17、RocketMQ集群性能调优 | 17.1、前言 |
| 17.2、系统参数调优 |
| 17.3、集群参数调优 |
| 18、RocketMQ集群平滑运维 | 18.1、前言 |
| 18.2、优雅摘除节点 |
| 18.3、平滑扩所容 |
| 19、RocketMQ集群监控(一) | 19.1、前言 |
| 19.2、监控项设计 |
| 19.3、监控开发实战 |
| 20、RocketMQ集群监控(二) | 20.1、前言 |
| 20.2、监控项设计 |
| 20.3、监控开发实战 |
| 21、RocketMQ集群告警 | 21.1、前言 |
| 21.2、告警项设计 |
| 21.3、告警实战开发 |
| 22、RocketMQ集群踩坑记 | 22.1、集群节点进程神秘消失 |
| 22.2、Master节点CPU莫名飙高 |
| 22.3、集群频繁抖动发送超时 |
| 22.4、用了此属性消费性能下降一半 |
| 23、消息轨迹、ACL与多副本搭建 | 23.1 消息轨迹 |
| 23.2 ACL |
| 23.3 多副本搭建 |
| 24、RocketMQ-Console常用页面指标获取逻辑 | |
| 编程技巧篇 | 25、RocketMQ NameServer背后的设计理念 | 25.1 Nameserver工作机制 |
| 25.2 两种设计注册中心的思路 |
| 25.3 Nameserver数据不一致影响分析 |
| 26、JAVA并发编程实战 | 26.1 读写锁的使用场景 |
| 26.2 信号量使用技巧 |
| 26.3 同步转异步编程技巧 |
| 26.4 CompletableFuture编程技巧 |
| 27、从 RocketMQ学基于文件的编程模式(一) | 27.1 消息存储格式看文件编程 |
| 27.2 内存映射与页缓存 |
| 27.3 顺序写 |
| 27.4 引用计数器 |
| 28、从 RocketMQ学基于文件的编程模式(二) | 28.1 同步刷盘、异步刷盘 |
| 28.2 文件恢复机制 |
| 28.3 Java如何使用零拷贝 |
| 29、从RocketMQ学Netty网络编程技巧 | 29.1 从整个类体系看网络设计 |
| 29.2 Netty 网络编程要点 |
| 29.3 线程隔离机制 |
| 30、Ro
cketMQ学习方法之我见 | |
扫帚不到,灰尘不会自己跑掉
没弄懂的知识,我们不去学它,使用时还是不知其所以然。这正如地上的灰尘,扫帚不到,灰尘是不会自己跑掉的。
在长期的咨询过程发现一个现象,一个知识点,应届毕业生有问、工作3、4年的工程师在问、工作10年以上的专家也有在问。例如:广播消费和集群消费有什么区别?一个消费组订阅多个Tag的情况,多个Tag用||分割,在同一个消费组中一个消费者订阅TagA,同一个消费组的另外一个消费者订阅了TagB,为什么只能收到一部分消息?RocketMQ和Kafka有什么区别?类似的问题会一直重复下去,周而复始直到你把它研究了、学习了、搞明白为止。
我们应该学什么?
如果发散开来要学的东西太多了,感觉怎么学也学不完。所以要事为先,先学工作中绕不开的知识,RocketMQ如果在你公司中有使用或者既将使用,作为一个公司核心业务流转的基础设施组件,RocketMQ是绕不开的。业务开发使用、测试使用、运维同学也在使用。
我们应该怎么学?
自己关起门来搞研究,一个是精力有限,另一个是缺少实战环境验证,学习效率也较低。像国家要引进西方发达国家先进技术、派遣留学生一样,如果能从别人踩过的坑、实战的总结中学习吸收,在实践中小心求证,发展成为自己的知识体系,不愧为一个高效的学习路径。瓷实的作者团队相信能给你一个很高的起点。
唯有坚持不懈!
在面试中我们看到一个现象,有的同学985学校毕业,有一个很好的起点和光环,工作多年后发现技术没有亮点、行业深度也缺少积累;有的同学毕业普通二本甚至专科学校,工作多年后,在其身上却发现了某个技术领域研究很深或者行业知识研究很深。这种现象究其原因是在常年累月的工作中是否能坚持学习,就像丁威老师的座右铭一样唯有坚持不懈,持续不断学习、久久为功才是不断提升自己的终极法宝。