消息中间件为什么选择 RocketMQ? 有什么优势?又该如何学呢?这份RabbitMQ学习笔记,入门的不二之选!

248 阅读5分钟

说起消息队列,ActiveMQ、RabbitMQ、RocketMQ、Kafka、Pulsar 等纷纷涌入我们的脑海中, 在如此众多的开源消息队列产品中,作为一名合格的架构师如何给出高性价比的方案呢?商业化的产品暂不纳入选项中。

接下来我将从RocketMQ 的优势方面解释为什么选择 RocketMQ 。​

RocketMQ 的优势

一、RocketMQ 如何解决和友好面对公司层面的诉求

1. 技术成本

就技术成熟度而言,在经历阿里双十一数万亿洪峰、微众银行、民生银行、蚂蚁金服、平安、字节跳动、快手、美团、京东、网易等各种行业大厂的考验后,就不言而喻了。 ​ RocketMQ 对于服务器的配置要求不高, 普通的云主机都可以。曾经我们验证 8C 16G 500G SSD 的 2 主 2 从的集群,发送 tps 可以到 4~5w ,消费 tps 峰值 20w +,稳定在 8w~9w 。并且,还能根据业务实际的需求无感的横向扩展。 ​ 综合而言, 技术成本相对可控且人才多。 ​

2. 人力成本
人力成本主要是现有的技术人员的学习成本、招新人的成本。 ​ RocketMQ 是 java 开发的,代码也非常稳定、有条理,各个版本之间除了功能有差异之外,Api 、传输协议几乎没有太多变化,对于升级而言也更加方便。 ​ java 也是目前中间件采用的比较主流的语言,使用的技术人员非常广泛。RocketMQ 在金融行业比如:微众银行、民生银行、蚂蚁金服、平安; 其他行业公司,比如阿里、字节跳动、快手、美团、京东、网易等与大量中小企业都在使用,候选人范围相对较大。 ​

对于 java 方面的消息队列方面的人才相比 C/C++、C#、Python、Go 等还是更多的:主流的 Kafka 是 scala + java、pulsar 是 java ,对于招聘也有极大的优势。

综合而言,RocketMQ 技术员对于人力成本比较友好。

二、从中间件组层面看,RocketMQ 是如何提供优秀的能力,为业务保驾护航呢?

1. 稳定性 ​ 金融级可靠、阿里双十一稳定支持万亿级消息洪峰,在笔者之前所在公司也有过 2 年+零事故的佳绩。 ​ 2. 功能丰富,支持的场景众多

  • 重试、死信机制,友好、无感的业务重试机制。
  • 顺序消息、事物消息
  • 万级 Topic 数量支持
  • 消息过滤
  • 消息轨迹追踪
  • 主从自动切换
  • 原生支持 Prometheus 监控
  • 原生支持易用管理平台:RocketMQ Console
  • 访问权限控制(ACL)

3. 性能

  • RocketMQ 可以支持 99.9% 的写入延迟在 2 ms ,其他的开源消息队列中间件基本都是大于 5 ms ;目前大部分消息队列中间间都支持横向扩展,吞吐上横向扩展几乎都可以满足。RocketMQ 的在滴滴做的性能测试: _developer.aliyun.com/article/664… _, 大家参考。
  • 发送、消费 tps 和 kafka 一个数量级,Topic 数量剧增对于性能影响较小。

4. 管理平台 ​ RocketMQ Console 原生支持:

github.com/apache/rock…


5. 监控、报警 ​ RocketMQ Exporter 原生支持 Prometheus:

github.com/apache/rock…

6. 运维 & 支持 & 开源社区

  • 无 zk 等第三方依赖,开箱即用

综合看来,RocketMQ 稳定、可靠、性能好,开箱即用,不依赖 Zookeeper ,系统的稳定性更高,复杂度更小。

三、对于最终用户:业务研发、业务研发 Leader,他们的核心担忧是提供的技术是否稳定可靠、是否快速方便的接入

​ 从中间件组层面看这个问题时,RocketMQ 稳定、可靠,那对于接入是否友好呢? ​ RocketMQ 提供 java 原生客户端、Spring 客户端,C++ 客户端、Python 客户端、Go 客户端等多类型、多语言的客户端,对于各种项目都可以统一接入。 ​ 微服务框架中 Spring Cloud 基本已经成为事实标准,RocketMQ 支持 Spring boot Starter 和 Spring Cloud Function 等多种方式融合入微服务框架,对于 Spring 体系支持更加方便快捷。 ​

Kafka vs RocketMQ

​ 实际中,很多人应该面临过 RocketMQ vs Kafka ,Kafka 适合对于延迟不敏感、批量型、Topic 数量可控、对于消息丢失不敏感的场景。比如大数据场景的 MySQL-2Hive、MySQL-2-Flink 的数据流通道,日志数据流通道等。

RocketMQ 适用于金融转账消息、订单状态变更消息、手机消息 Push 等业务场景。这些场景 Topic 数量通常过万,对于消息延迟和丢失极度敏感,数据通常是论条处理。对于海量数据的问题,一般地横向扩容完全可以解决。

合适的场景选择合适的产品,万能的产品是不存在的,都是折中,都是取舍。

怎么去学RabbitMQ?

这就是今天的重点了,我今天给大家分享的RabbitMQ学习笔记【+jcc4261获取】就是帮助大家去学习、巩固 RabbitMQ的。这份笔记从如何安装、配置到高可用集群再到项目实战,一站式服务!

无论你是一窍不通的新人,还是需要去巩固、实战去面试大厂的朋友们,我想这份笔记你们都不应该错过!

由于篇幅原因,这里不能把笔记的全部内容全部分享出来,只能展示一些笔记的内容截图

第一部分:RabbitMQ简介

第二部分:RabbitMQ入门

第三部分:客户端开发向导

第四部分:RabbitMQ进阶

第五部分:RabbitMQ管理

第六部分:RabbitMQ配置

第七部分:RabbitMQ运维

第八部分:跨越集群的界限

第九部分:RabbitMQ高阶

第十部分:网络分区

第十一部分:RabbitMQ扩展

总结

之前的文章中我提到过,一个程序员想要得到很好的提升,在技术层面有很大的提升一定要把握自己职业生涯的前五年,这是我们学习能力最强的时期。