作者:李伟

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

接下来我将从选型要素、RocketMQ 的优势两个方面解释为什么选择 RocketMQ 。

选型要素


首先从公司、消息队列服务提供者(一般是中间件团队)、最终用户三个角度来简单总结分析。

一、从公司层面看, 关注如下几点:


1. 技术成本

技术成本,一般包含服务器成本、二次开发成本、后期维护成本等,言而总之:都是钱。

服务器目前基本都使用云服务器,不同的云厂商的相同配置的服务器性能也有一定差异, 服务器成本一般需要了解:云厂商机器性能、云厂商优惠、所需服务器配置、服务器台数、单台服务器目前的价格、单台服务器优惠后的价格等。

2. 人力成本

人力成本,一般包含现有技术人员成本、新人招聘成本。

新的技术选型对于目前的技术人员接受程度怎么样,学习的难易程度怎样等,都是需要考虑的。如果太难的话,上线周期会变长、业务需求实现速度慢,甚至有人直接离职。

新人招聘成本,一般招聘一个新人有如下几个过程:简历筛选、预约面试、数轮面试、发 offer 、接受 offer 、正式入职、试用期、转正。这中间涉及到猎头成本、人力资源沟通成本、面试成本、新人入职后环境适应成本等等。

3. 其他

目前处于不同阶段的互联网公司对于技术成本、人力成本有着不一样的要求,但是很多有一定规模的公司实际上还是用“买买买”的心态来对待的:只要业务发展快速,买服务器、招人都不是问题,如果成本高了就做技术降成本、裁员。这不仅是员工之痛,也是业务之痛,更是公司之痛。

二、从中间件组层面看, 关注如下几点:


1. 稳定

公司级的服务首要的一点就是稳定。拥有稳定的组件、稳定的服务,业务才能有条不紊的进行。所以说,无论什么时候, 稳定都是王道。

2. 功能支持

不同的业务场景需要的功能也不尽相同,通常我们会考虑重试、死信机制,位点重置,定时延迟消息、事物消息,主从切换,权限控制等方面。

3. 性能

目前包含写入延迟和吞吐。

4. 管理平台

首先需要满足最终用户接入、查看、排障,管理员管控 topic 、消费者方便等。管理平台有现成的最好,方便二次开发 。

5. 监控、报警

监控报警是否完善、是否方便接入公司内部自研体系,或者行业的事实标准 Prometheus 。

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

如果产品上线后, 大部分时间,我们都是在做运维&支持。运维包含服务部署、迁移、服务升级、解决系统 Bug 、用户使用答疑、管理平台和监控报警平台升级等。

7. 其他

我们除了依赖自身以外,也可以借助社区的力量,同一个问题可能别人遇到过并且提交过 PR ,已经得到解决,我们就可以以此作为借鉴。所以社区的活跃情况也是非常重要的考虑。

三、从最终用户(一般包含业务后端研发以及他们的 Leader )看


1. 稳定性

对于业务的研发和他们的 Leader ,他们的核心任务是实现业务逻辑。如果一个服务三天两头总是有问题, 对于他们来说是比较致命的,所以稳定性是比较核心的一部分。

2. 改造现有项目的难度

旧项目改造其实是业务研发接入新中间件实际操作最多的部分。

3. 新项目接入是否便捷

是否便捷接入跟他们的工作量有着直接的关联。

4. 与目前的 App 微服务框架兼容怎样

新项目的接入和公司微服务框架兼容都比较容易。一般中间件在提供服务时都会考虑业务研发接入的便利性。

RocketMQ 的优势


下面将按照选项要素的要求, 分析 RocketMQ 在这方面的优势。

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


1. 技术成本

就技术成熟度而言,在经历阿里双十一数万亿洪峰、微众银行、民生银行、蚂蚁金服、平安、字节跳动、快手、美团、京东、网易等各种行业大厂的考验后,就不言而喻了。

RocketMQ 对于服务器的配置要求不高, 普通的云主机都可以。曾经我们验证 8C 16G 500G SSD 的 2 主 2 从的集群,发送 tps 可以到 4~5w ,消费 tps 峰值 20w +,稳定在 8w~9w 。并且,还能根据业务实际的需求无感的横向扩展。

综合而言, 技术成本相对可控且人才多。

2. 人力成本

人力成本主要是现有的技术人员的学习成本、招新人的成本。

RocketMQ 是 java 开发的,代码也非常稳定、有条理,各个版本之间除了功能有差异之外,Api 、传输协议几乎没有太多变化,对于升级而言也更加方便。

java 也是目前中间件采用的比较主流的语言,使用的技术人员非常广泛。RocketMQ 在金融行业比如:微众银行、民生银行、蚂蚁金服、平安; 其他行业公司,比如阿里、字节跳动、快手、美团、京东、网易等与大量中小企业都在使用,候选人范围相对较大。

RocketMQ 社区也比较活跃,钉钉群、微信群、QQ 群众多,社区文档非常丰富和完善,原理剖析视频、文档也非常多,非常易于学习和入门。

下面是钉钉群,欢迎大家加群留言、答疑。

对于 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 的在滴滴做的性能测试: _https://developer.aliyun.com/article/664608 _, 大家参考。
  • 发送、消费 tps 和 kafka 一个数量级,Topic 数量剧增对于性能影响较小。

4. 管理平台

RocketMQ Console 原生支持:
https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console

5. 监控、报警

RocketMQ Exporter 原生支持 Prometheus:
https://github.com/apache/rocketmq-exporter

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

  • 无 zk 等第三方依赖,开箱即用
  • 社区钉钉群、微信群、QQ 群非常活跃,钉钉群、微信群有问必答。
  • 社区最近新来一位小姐姐 Commiter ,团队也在不断壮大。

综合看来,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 数量通常过万,对于消息延迟和丢失极度敏感,数据通常是论条处理。对于海量数据的问题,一般地横向扩容完全可以解决。

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

作者介绍


李伟,Apache RocketMQ 社区 Commiter ,Python 客户端项目负责人, Apache RocketMQ 北京社区联合发起人,Apache Doris Contributor 。目前就职于腾讯,主要负责 OLAP 数据库开发,对分布式存储系统设计和研发有丰富经验,也热衷于知识分享和社区活动。

RocketMQ 学习资料


阿里云知行实验室提供一系列的 RocketMQ 在线实操环境,包含操作文档、ubuntu 实验环境,大家随时尝试玩玩:

  • Apache RocketMQ 开源入门最佳实践:

https://start.aliyun.com/course?spm=a2ck6.17690074.0.0.53c52e7dSi19ML&id=eAz6VTK5

  • 《RocketMQ 分布式消息中间件:核心原理与最佳实践》随书实战:https://start.aliyun.com/course?spm=a2ck6.17690074.0.0.7aec2e7dCPMDFG&id=ASeJlmpX

  • 在 Spring 生态中玩转 RocketMQ:

https://start.aliyun.com/course?spm=a2ck6.17690074.0.0.241e2e7d0aEIxJ&id=hzidp9W1

实验预览图如下:

其他资源

  • RocketMQ vs. ActiveMQ vs. Kafka:

_ http://rocketmq.apache.org/docs/motivation/_

  • RocketMQ 源码:

_ https://github.com/apache/rocketmq_

  • RocketMQ Exporter 源码:

_ https://github.com/apache/rocketmq-exporter_

  • RocketMQ Spring 源码:

_ https://github.com/apache/rocketmq-spring_

  • RocketMQ C++ 客户端源码:

_ https://github.com/apache/rocketmq-client-cpp_

  • RocketMQ Python 客户端源码:

_ https://github.com/apache/rocketmq-client-python_

  • RocketMQ Go 客户端源码:

_ https://github.com/apache/rocketmq-client-go_

  • RocketMQ Console 源码:

_ https://github.com/apache/rocketmq-externals/tree/master/rocketmq-console_

  • RocketMQ Flink Connector 源码:

_ https://github.com/apache/rocketmq-externals/tree/master/rocketmq-flink_

  • RocketMQ 如何保证消息可靠:

    [https://mp.weixin.qq.com/s/imLTVwgm8MOiY1_5s3rdFQ](https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247502152&idx=1&sn=3c356a4b65d50e964f0350a13ba08df3&scene=21#wechat_redirect)
    
  • 大揭秘!RocketMQ 如何管理消费进度:

    [https://mp.weixin.qq.com/s/rHs9L1gTuFs05Cs2F4JXOw](https://mp.weixin.qq.com/s?__biz=MjM5NTk0NjMwOQ==&mid=2651114644&idx=1&sn=fa93f0264989b536153dc683a246601a&scene=21#wechat_redirect)
    

消息中间件:为什么我们选择 RocketMQ相关推荐

  1. 消息中间件第一讲:RocketMQ从入门到精通

    消息队列是一种系统间相互协作的通信机制,使用消息队列的场景一般有异步处理.解耦.流量削峰.日志收集.事务最终一致性这几种,主要解决诸如消息堆积.消息持久化.可靠投递.消息重复.严格有序.集群等各种问题 ...

  2. spring cloud笔记(1) 整合消息中间件ONS(商业版rocketmq)

    之前一直用spring boot+dubbo+zookeeper来搭建分布式项目,后来在网上看到有人说用spring cloud更好,前两天抽时间了解了一下,spring cloud 为我们提供了许多 ...

  3. 【详解文件IO系列】讲讲 MQ 消息中间件 (Kafka,RocketMQ等)与 MMAP、PageCache 的故事

    网络io相关视频讲解:网路io底层epoll 网络编程相关视频讲解:详解网络编程相关的细节处理 Linux服务器开发高级架构学习视频:C/C++Linux服务器开发/Linux后端开发架构师 一般的I ...

  4. 消息中间件学习总结(3)——RocketMQ之十分钟入门RocketMQ

    本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能.高吞吐量的分布式消息中间件否可以解决,规范中如何定义这些问题.然后 ...

  5. 为什么RocketMQ是金融核心系统消息中间件的第一选择

    1 .概述 作为金融企业对公众提供服务一定要保证其可用性,尽量做到更多个9(一般SLA中描述的高可用性99.99%,中的9越多代表全年服务可用时间越长服务更可靠,停机时间越短),随着软件系统的复杂度越 ...

  6. 十分钟入门 RocketMQ

    作者 | 尘央 来源 | https://developer.aliyun.com/article/66101 本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apach ...

  7. 什么是消息队列 RocketMQ 版?

    消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟.高并发.高可用.高可靠的分布式消息中间件.消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰 ...

  8. 如何在 Spring 生态中玩转 RocketMQ?

    作者 | 通融.洛夜 来源 | 阿里巴巴云原生公众号 RocketMQ 作为业务消息的首选,在消息和流处理领域被广泛应用.而微服务生态 Spring 框架也是业务开发中最受欢迎的框架,两者的完美契合使 ...

  9. 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?

    作者 | 元毅  阿里巴巴高级开发工程师 阿里巴巴云原生公众号后台回复 Knative,免费下载<Knative 云原生应用开发指南>电子书! 想必大家都比较了解 RocketMQ 消息服 ...

最新文章

  1. Linux man命令
  2. ehcache + spring 整合以及配置说明 ,附带整合问题 (已解决)
  3. 使用分页插件PageHelper
  4. 关于创业:希望有人在N年前就告诉我的一些事儿
  5. HTML+CSS+JS实现 ❤️three 3D铅笔绘图工具特效❤️
  6. HEVC---xCompressCU()函数作用及位置
  7. Exadata中最有用的功能-存储索引
  8. Eclipse 中如何设置字体大小与样式
  9. java socket聊天_java_基于Java Socket实现一个简易在线聊天功能(一),最近做了一个项目,其中有一 - phpStudy...
  10. 「陶哲軒實分析」 習題 3.4.4
  11. 图片像素低,图片模糊怎么变清晰?
  12. 抖音上热门技巧内容讲解,百万营销干货分享!
  13. Oracle的逻辑读和物理读
  14. window自带的计算机应用程序,Win10系统电脑不小心将自带的应用程序卸载了该怎么恢复...
  15. 【资讯】2017年乌镇互联网大会,互联网大佬们齐聚首
  16. 纯文本抽出程序库DMC TEXT FILTER
  17. css实现文字两端对齐
  18. 计算机系高考激励的句子,最新暖心激励高考生的励志句子40句
  19. 一年中最后一个月的最后一天说说_最后一天的说说_最后一天的心情说说大全...
  20. shell脚本小工具之万能解压和压缩器---实现思路

热门文章

  1. ACM入门之【树状数组习题】
  2. 3.1.2 内存管理的概念
  3. Jemeter对HTTP接口压测(二)
  4. Spring boot的@Conditional派生注解
  5. Redis集群的重启
  6. mysql count if语句_COUNT分组条件去重的sql统计语句示例(mysql)
  7. kindle亚马逊个人文档不显示_4.68亿个人信息泄露,大数据时代裸奔?探悉不落地的文档在线预览...
  8. php 判断类存在,PHP怎么判断类是否存在
  9. 计算发送延时与传播延迟_消息队列——延时消息应用解析及实践
  10. 找不到python2018解释器_python解释器安装教程的方法步骤