作者:李伟
说起音讯队列,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/... _, 大家参考。
- 发送、生产 tps 和 kafka 一个数量级,Topic 数量剧增对于性能影响较小。
4. 治理平台
RocketMQ Console 原生反对:
https://github.com/apache/roc...
5. 监控、报警
RocketMQ Exporter 原生反对 Prometheus:
https://github.com/apache/roc...
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/cour...
- 《RocketMQ 分布式消息中间件:外围原理与最佳实际》随书实战:_https://start.aliyun.com/cour...
- 在 Spring 生态中玩转 RocketMQ:
https://start.aliyun.com/cour...
试验预览图如下:
其余资源
- RocketMQ vs. ActiveMQ vs. Kafka:
http://rocketmq.apache.org/do...
- RocketMQ 源码:
https://github.com/apache/roc...
- RocketMQ Exporter 源码:
https://github.com/apache/roc...
- RocketMQ Spring 源码:
https://github.com/apache/roc...
- RocketMQ C++ 客户端源码:
https://github.com/apache/roc...
- RocketMQ Python 客户端源码:
https://github.com/apache/roc...
- RocketMQ Go 客户端源码:
https://github.com/apache/roc...
- RocketMQ Console 源码:
https://github.com/apache/roc...
- RocketMQ Flink Connector 源码:
https://github.com/apache/roc...
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)