MQ调研梳理
1.架构
|
主项 |
子项 |
rabbitMQ |
rocketMQ |
Kafka |
Hippo |
Tube |
|---|---|---|---|---|---|---|
|
高可用 |
1:镜像队列。 2:集群。master/slave机制。 |
HA 同步双写和异步复制均支持 |
(同mafka) |
1、中心节点:HA |
||
|
高吞吐 |
性能 跟cpu 密切相关,5000是4核,5000左右。具体见rabbitmq基准性能测试 |
异步刷盘 单机7万qps, 三台机器12万(网测) |
(同mafka) |
未提及 |
单个Tube集群可稳定承载5w以上的客户端(生产者/消费者)数量,单台broker并发写入量可达10w TPS,使用1k大小的消息测试(机器配置:12核2.1GHz CPU带超线程、64G内存,Raid 5级磁盘阵列)时,可跑满千兆网卡带宽;Tube在绝大多数场景下可以将消息的延迟限制在毫秒级。 |
|
|
多机房部署 |
公司内无,shovel等插件支持 |
待确认 |
无 |
支持多 DC 部署 |
无 |
|
|
多机房容灾 |
公司内无,shovel等插件支持无 |
无 |
mirror maker |
未提及 |
无 |
|
|
高可靠 |
事务性, 1:producer->broker,producer 回ack的时候会在刷到盘或者消费者消费到回ack。并且会持久化 2:broker->consumer, 有确认机制。也会持久化,但是消费完会删除数据。 |
异步复制可保证99%的消息不丢失,通过同步双写技术可以完全避免单点,同步双写会对性能有一定的影响, 适合对消息要求极高的场合。 |
(同mafka) |
1. 存储可靠性 a) WAL+持久化; b)数据存储多副本 c) 存储节点自动failover;(failover 的时候会不会存在数据落后的被选为 master,具体策略没提及) 2. 传输可靠性 a) ACK 机制 b) CRC 校验 (细节未提及) |
1、无事务性 2、使用了磁盘的Raid 10来保证数据的容错 3、两种情况丢消息:c pull后挂掉,机器挂掉 |
|
|
数据备份防止数据单点 |
master-slave 双写 |
服务器粒度master-slave |
Topic粒度,replica factor指定数据备份数目 |
2.特性
|
主项 |
rabbitMQ |
Kafka |
rocketMQ |
Hippo |
Tube |
|---|---|---|---|---|---|
|
1对多 |
Y |
Y |
Y |
Y |
Y |
|
消息timer (延迟消费) |
Y(队列粒度) |
N |
Y(时间梯度)、商业版本毫秒级 |
- |
|
|
event trigger? |
N |
N |
N |
- |
|
|
group message |
Y |
Y |
Y |
Y |
Y |
|
消息tag(filter) |
N |
N |
Y |
- |
|
|
消息回溯 |
N |
Y(offset) |
Y(时间粒度、offset待确认) |
Y |
|
|
事务性 |
Y |
N |
Y |
- |
N |
|
优先级 |
Y(具体的话,数字越大优先级越大,通过插件实现的) |
N |
Y(高中低) |
- |
|
|
染色 |
N |
N |
N |
- |
|
|
文件传输(很奇怪的需求) |
N |
N |
N |
- |
|
|
持久化 |
数据库(文件) |
文件 |
文件 |
文件 |
文件 |
|
扩容 |
Y |
Y (平滑迁移,高级) |
Y |
Y |
无需扩容 |
|
多副本容灾(同机房、多机房) |
N |
mirror-maker canal-kafka |
HALF (不支持机房容灾) 针对有状态节点的难题,我们提供了一套数据自动扩容和迁移的工具来满足用户的自动扩容缩容中所产生的数据迁移类的需求。 |
未提及 |
HALF (不支持机房容灾) 跨机房部署需要解决的两大问题就是容灾和延时。当前Tube还不具备跨机房容灾的能力,但是对于Producer/Consumer端的跨机房,目前已经有在生产环境部署使用并且运行稳定,但是因为网络时延的存在,在性能和吞吐上有一定的下降 |
|
负载均衡 |
客户端咱自己封装的。 |
Y,自动 |
生产端从NameServer获取指定Topic的路由信息, 采用RR算法,从返回的队列中挑选一个队列来进行发送。 (支持失败重试和发送消息超时设置) 消费端从NameServer获取Topic下的路由信息和所有消费端, 根据平均分配算法、配置、或者机房来选择具体的队列进行消费, 做到消费端的负载均衡。 |
Producer: 从 controller 获取所有的 broker 列表,round-robin。 保持与 controller 心跳, 在 broker 发生变化时,获得更新。 Consumer: 从 controller 获取所有的 consumer 列表, 按照固定算法分配,每个 consumer 独占一个 partition。consumer 独占 partition 设置了超时。 保持与 controller 的心跳, 在 consumer 组发生变化时,获得更新并调整。 |
中心节点 |
|
消费模型 |
推拉 |
拉 |
拉 |
拉 |
拉 |
|
doubt message(消息追踪) |
Y(firehost tracer) |
N |
Y, 可以查询指定消息状态 |
- |
|
|
消息积累/消息积压 |
积压敏感,积压过多会触发集群流控,导致该集群生产消费受限制。 |
无上限 |
RocketMQ单机可以支持亿级的消息堆积能力 |
Y |
Y |
|
消息回溯 |
N |
offset回溯 |
Y,时间回溯,毫秒级 |
Y |
|
|
broker消息过滤 |
N |
|
|||
|
消息轨迹 |
Y,通过插件(firehose)查询 |
N |
商业版ons支持 |
||
|
单机支持的TOPIC数(待确认) |
RocketMQ单机支持最高5万个队列,Load不会发生明显变化 |
3.运维成本(部署、监控等)
|
主项 |
子项 |
rabbitMQ |
Kafka |
rocketMQ |
|---|---|---|---|---|
|
工具栈 |
工具完善,运维方面 |
kafka manager(by yahoo) |
脚本工具 |
|
|
扩展项目 |
||||
相关调研资料:
- 阿里云 ONS(Open Notification Service): 【视频】阿里分布式消息系统(ons)原理与实践 阿里分布式消息系统ONS原理与实践.pdf
MQ调研梳理的更多相关文章
- 手写MQ框架(四)-使用netty改造梳理
一.背景 书接上文手写MQ框架(三)-客户端实现,前面通过web的形式实现了mq的服务端和客户端,现在计划使用netty来改造一下.前段时间学习了一下netty的使用(https://www.w3cs ...
- 关于RPC与MQ异同的理解
最近看了一些资料,回顾过去项目的经验,梳理自己对两者异同的理解: 相同: 1.都利于大型系统的解耦: 2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言): 不同: 1. ...
- quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...
- ERP调研之 对话
开卷语: 2009年8月6号,A公司ERP项目顺利启动,按照项目进度的安排,项目组成员立即投入到紧张而又忙碌的的业务调研之中.这次为期3周的业务调研面向企业所有业务部门,包括产品部门.采购部门.计划部 ...
- 定时组件quartz系列<三>quartz调度机制调研及源码分析
quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...
- (1)quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析 原文地址:http://demo.netfoucs.com/gklifg/article/details/27090179 引言quartz集群架构调 ...
- 为什么会需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
- 消息队列一:为什么需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
- 企业业务数据处理用“work”还是“MQ”
近期公司在做架构梳理已经项目架构方向,不知不觉就引起了使用“work”跑数据还是用“MQ”进行跑数据的争论! 对于争论这件事在各行各业都有,其实我觉得针对“争论”这个词的根源在于一件事情有很多解决方案 ...
随机推荐
- 【转载】mysql 热备份
原文: http://www.jb51.net/article/70967.htm 热备和冷备是两个相对的概念,冷备是把数据库服务,比如MySQL,Oracle停下来,然后使用拷贝.打包或者压缩命令对 ...
- Android NDK r9的配置与使用
Android NDK 配置: 网上有很多教程,但大部分是旧版本的内容,最新版本的已经改变,为了让大家少走弯路,在这里针对r9的配置进行记录分享. 要玩NDK,你或多或少要用到以下一些东西,所以先做一 ...
- html input控件总结
Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text 输入类型是text,这是我们见的 ...
- ubuntu14安装redis
1.下载源文件 wget http://download.redis.io/releases/redis-3.0.7.tar.gz 2.解压 tar vxzf redis-3.0.7.tar.gz 3 ...
- laravel5.7的redis配置,一直报错Class 'Predis\Client' not found
laravel5.7的redis配置,一直报错Class 'Predis\Client' not found 首先我检查了配置,和composer 都没有错,用原生的redis也可以正常连接和读写. ...
- 在eclipse-oxygen-sts中,关于快捷键[CTRL + SHIFT + O]失效的问题
这是sts的一个bug,没关系,重新设置接口 按照如图位置修改即可 下图截自于stackoverflow
- node webkit(nw.js) 设置自动更新
原理:把更新的文件放在服务器上,设置一个客户端版本号,每次打开客户端的时候,通过接口获取服务器上的版本,如果高于本地的版本就下载服务器上的代码,低于或等于就不更新 <script> var ...
- HTML5学习笔记(二):HTML基础学习之一
元素.属性和格式化 元素是指开始标签到结束标签之前的所有代码,如: <p>this is my page!</p> <!-- 下面的可以称为空元素 --> < ...
- 2-7-集合运算(A-B)∪(B-A)-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第2章 线性表 - 集合运算(A-B)∪(B-A) ——<数据结构>-严蔚敏.吴伟民版 ★有疑问先阅读★ 源码使用说明 链接☛☛☛ <数据结构-C语言 ...
- (原创)composite模式和bridge模式是天生的好朋友
composite模式的意图是:将对象组合成树形结构以表示“部分-整体”的层次结构.composite使得用户对单个对象和组合对象的使用具有一致性.它的类图如下: composite模式的实现分为透明 ...