几款消息中间的调研

做了几年开发,你知道自己的系统为什么要用消息中间件吗? 这篇文章开始,我们会把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题。 阅读详情

消息系统简介

本次主要调研业界使用广泛的两款消息队列——RabbitMQ, Kafka, 以及阿里云的提供的两个服务, MNS和ONS.

RabbitMQ

RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。

阿里云MNS

阿里云消息服务(Message Service,原MQS)是阿里云唯一商用的消息中间件服务。与传统的消息中间件不同,消息服务一开始就是基于阿里云自主研发的飞天分布式系统来设计和实现,具有大规模,高可靠、高并发访问和超强消息堆积能力的特点。消息服务API采用HTTP RESTful标准,接入方便,跨网络能力强;已全面接入资源访问控制服务(RAM)、专有网络(VPC),支持各种安全访问控制;接入云监控,提供完善的监控及报警机制。消息服务提供丰富的SDK、解决方案、最佳实践和7x24小时的技术支持,帮助应用开发者在应用组件之间自由地传递数据和构建松耦合、分布式、高可用系统。

阿里云ONS / RocketMQ

消息队列(Message Queue,简称MQ)是企业级互联网架构的核心服务,基于高可用分布式集群技术,搭建了包括发布订阅、接入、管理、监控报警等一套完整的高性能消息云服务,帮您实现分布式计算场景中所有异步解耦功能。经过多年积累,在交易、商品、营销等核心链路包括在双11场景下都有广泛使用,服务于阿里内部上千个核心应用,每天消息量达上千亿条,MQ由阿里巴巴集团中间件技术部自主研发,是原汁原味的阿里集团中间件技术精华之沉淀。

Kafka

Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡.

Kafka的用户中包括LinkedIn, Yahoo, Twitter, Uber, PayPal, Airbnb, Tumblr等, 被用于日志收集, 离线分析, 实时分析, 消息管道等, 详情见 Powerd By Kafka

Kafka官方提供了Java版本的客户端API, Kafka社区产生了多种语言的客户端, 包括PHP, Python, Go, C/C++, Ruby, NodeJS等, 详情见 Kafka 客户端列表

Kafka Broker较为轻量, 不保存consumer的消费进度, 由consumer自己控制。 因此使用起来非常灵活, 可以针对不同场景定制不同的消费服务.

  • Exactly Once: 消费且仅消费一次
  • 回溯数据, 进行重复消费

目前Kafka的管理界面不友好, 官方只给了命令行工具. 通过命令行工具能简单地查看和操作Topic. Yahoo开源了自己的Kafka Web管理界面 Kafka-Manager, 但不支持最新的0.9.0版本的部分功能.

Kafka, RabbitMQ, MNS, ONS对比

–KafkaRabbitMQMNSONS
所属社区/公司ApacheMozilla Public LicenseAlibabaAlibaba
成熟度成熟成熟成熟比较成熟,公测中
特点充分考虑消息堆积因素,认为 consumer 不一定处于 alive 状态;考虑各个角色的分布式; 为追求吞吐量设计;被多家公司和多个开源项目使用由于Erlang语言的并发能力,性能很好, 支持多种协议,重量级系统消息服务API采用HTTP RESTful标准,接入方便,跨网络能力强高性能, 支持数据海量堆积, 支持主动推送
授权方式开源开源商业商业,有对应的开源项目RocketMQ
开发语言Scala&JavaErlangJavaJava
客户端支持语言官方支持Java, 开源社区有多语言版本, 如PHP, Python, Go, C/C++, Ruby, NodeJS等编程语言, 详见 Kafka 客户端列表官方支持Erlang, Java, Ruby等, 社区产出多种语言API,详见RabbitMQ客户端&开发工具Java, C++, Python, C#, PHP, Node.js(非官方), Golang(非官方)Java, C/C++, C#, PHP
协议支持自有协议,社区封装了HTTP协议支持多协议支持:AMQP,XMPP, SMTP, STOMPHTTPONS私有协议
消息批量操作支持不支持支持不支持
消息推拉模式Pull多协议, Pull/Push均有支持PullPull, Push 
保证消息至少消费一次默认保证保证在消息有效期内,确保消息至少能被成功消费一次。不保证(消费失败16次后丢弃)
消息回溯支持消费完即删除, 不支持回溯消费完即删除, 不支持回溯支持
HA支持replica机制, leader宕掉后, 备份自动顶替, 并重新选举leader(基于Zookeeper)master/slave模式, master提供服务, slave仅作备份––
数据可靠性上周的测试中, 使用Kafka作为消息中间件, 数据可靠, 并且有replica机制, 有容错容灾能力可以保证数据不丢, 有slave用作备份数据三重备份, 可靠性达10个9 (官方数据)99.99% (官方数据)
QPS性能卓越, 详见下文Linkedin团队的测试性能优秀, 详见下文Linkedin团队的测试默认4000默认5000
持久化能力磁盘文件, 只要磁盘容量够, 可以做到无限消息堆积内存、文件,支持数据堆积,但数据堆积反过来影响生产速率消息持久化默认有期限, 支持海量堆积ONS消息默认保留三天,支持海量堆积
是否有序多Client保证有序若想有序,只能使用一个Client不保证有序不保证有序
事务不支持, 但可以通过Low Level API保证仅消费一次不支持不支持支持
集群支持支持支持支持
负载均衡支持支持支持支持
管理界面官方只提供了命令行版, Yahoo开源自己的Kafka Web管理界面Kafka-Manager较好好好
部署方式独立独立Aliyun提供服务Aliyun提供服务,可以独立部署

总结

  1. 事务支持方面,ONS/RocketMQ较为优秀,但是不支持消息批量操作, 不保证消息至少被消费一次.
  2. Kafka提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积, 支持批量操作, 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次. 但是官方提供的运维工具不友好,开源社区的运维工具支持的版本一般落后于最新版本的Kafka.
  3. 目前使用的MNS服务,拥有HTTP REST API, 使用简单, 数据可靠性高, 但是不保证消息有序,不能回溯数据.
  4. RabbitMQ为重量级消息系统, 支持多协议(很多协议是目前业务用不到的), 但是不支持回溯数据, master挂掉之后, 需要手动从slave恢复, 可用性略逊一筹.
附: LinkedIn团队对Kafka, RabbitMQ, ActiveMQ的性能研究
多智能体强化学习论文——SEAC(NIPS 2020) 存在的问题&研究动机&研究思路 在稀疏奖励的环境下,多智能体的exploration存在效率不足等问题。 在IAC的基础上尝试加入重要性采样,使得每次更新智能体iii的参数时,不再仅仅使用智能体iii的数据,而是使用所有智能体的数据进行智能体iii数据的更新。 对于原始的IAC算法是on-policy的,而SEAC则是off-poligy的。 创新点 在每个智能体iii的actoriactor_iactori​和criticicritic_icritici​的更新过程中,都加入了重要性 阅读详情

相关推荐

用化学方法nmp溶剂从佳能cmos传感器上剥离拜耳矩阵和微透镜

将光刻胶暴露于 NMP 溶剂中 10-15 分钟,并进行轻微的机械搅拌,将溶解的光刻胶从基材表面带走,即可去除大部分光刻胶,之后再进行第二次溶剂浴,以洗去微量含有光刻胶的溶剂。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。在我看来,这是必读的;

qq_40247880的博客 1476

阿里云 MQ和MNS的区别

消息队列 MQ 消息队列(Message Queue,简称 MQ)是构建分布式互联网应用的基础设施,通过 MQ 实现的松耦合架构设计可以提高系统可用性以及可扩展性,是适用于现代应用的最佳设计方案 主要包括 1、消息队列 RocketMQ 版 提供实时、精准的消息推送,如事件通知、短信推送、钉钉告警等 使用场景: 1、异步通知 提供实时、精准的消息推送,如事件通知、短信推送...

nzz_1214 5413

AXI_IIC读写操作

其实在之前调试过一次AXI_IIC,没调试通,碍于赶进度,就直接使用了zynq-PS侧的IIC,就一直搁置着了,这次抽空将这部分内容继续调试下去,这一次没花多少时间就调通了,现在将我的调试过程,经历,以及参考文档如下: 参考文档:pg090-axi-iic.pdf 参考链接:https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/IIC-Protocol-and-Programming-Sequence/ba-p/1072248 上面的这个

qq_32134427的博客 1万+

几款消息中间的调研(转)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33682719的博客 240

基于Simplis仿真的UC2843芯片建模与关键参数优化指南

本文详细介绍了使用Simplis仿真工具为UC2843 PWM控制器进行行为级建模的方法与关键参数优化实践。通过精确搭建芯片内部振荡器、误差放大器及电流采样等核心模块,工程师可以深入理解其工作原理,并利用模型优化振荡频率、最大占空比及反馈环路等关键参数,从而提升开关电源设计的效率与可靠性。

efc1234567的博客 460

Unity 2021 LTS安装避坑指南:从下载到第一个3D项目的完整流程

本文提供了一份详尽的Unity 2021 LTS安装与首个3D项目创建指南。内容涵盖从Unity Hub下载、版本选择、模块安装避坑,到编辑器界面解析、创建旋转立方体脚本的完整流程,旨在帮助初学者快速搭建稳定开发环境并上手核心操作。

mango的博客 310

厚积薄发--一文带您了解阿里云 RocketMQ 轻量版消息队列(MNS)

MNS 重点聚焦在基准消息队列的核心能力建设,MNS 经过多年迭代与打磨,尽管内部极为复杂,但一直努力保持其在客户端的简单易用,围绕轻量和集成两个命题,着力建设更易用的消息队列产品。...

阿里巴巴云原生的博客 2395

从高德、百度地图下载POI数据?用这个工具5分钟搞定GCJ02/BD09到WGS84的坐标纠偏

本文详细解析了高德、百度地图POI数据坐标偏移问题,并提供了从GCJ02/BD09到WGS84的高效转换方案。通过开源工具如coordtransform和ArcGIS等专业软件,实现毫米级精度的坐标纠偏,适用于商业选址、GIS分析等场景,显著提升数据准确性和工作效率。

weixin_26789847的博客 450

解密阿里云之飞天平台内核

发布时间: 2013-07-30 17:59  阅读: 2465 次  推荐: 3   原文链接   [收藏]     本文节选自《飞天开放平台编程指南——阿里云计算的实践(双色)》   周憬宇,李武军,过敏意编著   电子工业出版社出版   阿里云计算有限公司(简称“阿里云”)成立于2009年9月10日,致力于打造云计算的基础服务平台,注重为中小企业提供大规模、低成本、高可靠的云

novelly的专栏 2273

C#里用HttpListener实现WEB API接口服务端

本文介绍了一个基于WinForm的HTTP服务实现方案。该方案使用HttpListener类创建了一个支持JSON POST请求处理的轻量级Web服务器,主要特点包括:1) 纯线程方式实现请求监听和处理;2) 提供标准化的JSON响应格式;3) 支持自定义请求处理逻辑;4) 包含完整的日志记录功能。代码示例展示了如何初始化服务、处理不同类型的请求(包括JSON POST),并提供了线程安全的UI更新机制。该实现适用于需要简单HTTP接口的Windows桌面应用程序,可作为程序间通信的基础设施。

大坡3D软件开发 228

全志T527-TP9930-Camera

TP9930 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 BT656/BT1120 数据,从而实现在 T527 端来对数据进行处理和送显。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 3236

消息中间件调研

常见的消息中间件 当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka等 部分数据库如Redis、MySQL也可实现消息队列的功能 RabbitMQ RabbitMQ于2007年发布,使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP,SMTP,STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了Broke...

黑木崖的专栏 440

054_小驰私房菜_Camx i2c读写相关备忘

Camera 对Ae、Af这些控制,实际都是,最终实际都是落实到hal下发相关的指令给驱动,那hal这边是怎么给驱动下发相关命令的呢?#小驰私房菜054# #Qcom Camx#可以参考看下下面相关代码内容。

149

[分布式][消息中间件]为什么要使用消息中间件

假如面试官看你简历里写了MQ中间件的使用经验,很可能会有如下问题: 1、你们公司生产环境用的是什么消息中间件? 2、为什么要在系统里引入消息中间件? 3、引入消息中间件之后会有什么好处以及坏处? 好,我们一个个的来分析! 一、你们用的是什么消息中间件? 这个首先你可以说下你们公司选用的是什么消息中间件,比如用的是RabbitMQ,然后可以初步给一些你对不同MQ中间件技术的选型分析。 ...

疯一样的女子 692

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【最新面试系列之消息中间件】你们的系统架构中为什么要引入消息中间件?

这篇文章开始,我们把消息中间件这块高频的面试题给大家说一下,也会涵盖一些MQ中间件常见的技术问题。 假如面试官看你简历里写了MQ中间件的使用经验,很可能会有如下问题: * 你们公司生产环境用的是什么消息中间件?为什么用这种? * 为什么要在系统里引入消息中间件? * 引入消息中间件之后会有什么好处以及坏处? 好,我们一个个的来分析! 1.你们公司生产环境用的是什么消息中间件? 这个首先...

qq_25843323的博客 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

为什么一定要用消息中间件?

点击上方“Java后端技术”,选择“置顶或者星标”每天带你看高清大图哦!来源:石杉的架构笔记(ID:shishan100)这篇文章开始,我们把消息中间件这块高频的面试题给...

Java后端技术 2910

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

消息中间件

原文:http://developer.51cto.com/art/201901/591279.htm 消息中间件 一.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发Rocke...

鬼谷子的博客 215

为什么要引入消息中间件?

一 你们公司生产环境用的是什么消息中间件?       这个首先你可以说下你们公司选用的是什么消息中间件,比如用的是RabbitMQ,然后可以初步给一些你对不同MQ中间件技术的选型分析。   举个例子:比如说ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还是非常广泛的,功能很强大。   但是问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高吞吐的复杂场...

yuanbin52098的博客 817

剖析系统架构中为什么要引入消息中间件

一 你们公司生产环境用的是什么消息中间件? 你们公司生产环境用的是什么消息中间件? 这个首先你可以说下你们公司选用的是什么消息中间件,比如用的是RabbitMQ, 然后可以初步给一些你对不同MQ中间件技术的选型分析。 举个例子:比如说ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还是非常广泛的,功能很强大。 但是问题在于没法确认ActiveMQ可以支撑互联网公司...

李虹柏的博客 551

【MQ】哥们,你们的系统架构中为什么要引入消息中间件?

目录 一、你们公司生产环境用的是什么消息中间件? 二、为什么在你们系统架构中要引入消息中间件? 1)系统解耦 2)异步调用 3)流量削峰 三、引入消息中间件之后会有什么好处以及坏处? 1.系统可用性降低 2.系统稳定性降低 3.分布式一致性问题 三、总结 这篇文章开始,我们把消息中间件这块高频的...

凡是过往,皆为序章 468

消息中间件MQ面试题

消息中间件MQ面试题

590

消息中间件MQ

为什么使用MQ?MQ的优点? 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。 详答 主要是:解耦、异步、削峰。 解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?

R_TJW的博客 311

消息中间件mq笔记

为什么使用MQ?MQ的优点 简答 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。 详答 主要是:解耦、异步、削峰。 解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这

qq_36421001的博客 299

为什么要使用MQ消息中间件?这几个问题必须拿下

这个就是很典型的一个MQ的用法,用有限的机器资源承载高并发请求,如果业务场景允许异步削峰,高峰期积压一些请求在MQ里,然后高峰期过了,后台系统在一定时间内消费完毕不再积压的话,那就很适合用这种技术方案。大部分时候,每秒几百请求,一台机器就足够了,但是为了抗那每天瞬时的高峰,硬是部署了10台机器,每天就那半个小时有用,别的时候都是浪费资源的。假设你有一个系统,平时正常的时候每秒可能就几百个请求,系统部署在8核16G的机器的上,正常处理都是ok的,每秒几百请求是可以轻松抗住的。...

JavaShark的博客 417
上一篇: 深入浅出HTTPS基本原理
下一篇: 全面分析 Spring 的编程式事务管理及声明式事务管理
kobejayandy
博客等级 码龄18年 2853粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值