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

  • RocketMQ支持两种Broker端消息过滤方式

    • 根据Message Tag来过滤,相当于子topic概念

    • 向服务器上传一段Java代码,可以对消息做任意形式的过滤,甚至可以做Message Body的过滤拆分。

消息轨迹

Y,通过插件(firehose)查询

N

商业版ons支持

单机支持的TOPIC数(待确认)

RocketMQ单机支持最高5万个队列,Load不会发生明显变化

3.运维成本(部署、监控等)

主项

子项

rabbitMQ

Kafka

rocketMQ

工具栈

工具完善,运维方面

kafka manager(by yahoo)

脚本工具

扩展项目

https://github.com/rocketmq

相关调研资料:

MQ调研梳理的更多相关文章

  1. 手写MQ框架(四)-使用netty改造梳理

    一.背景 书接上文手写MQ框架(三)-客户端实现,前面通过web的形式实现了mq的服务端和客户端,现在计划使用netty来改造一下.前段时间学习了一下netty的使用(https://www.w3cs ...

  2. 关于RPC与MQ异同的理解

    最近看了一些资料,回顾过去项目的经验,梳理自己对两者异同的理解: 相同: 1.都利于大型系统的解耦: 2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言): 不同: 1. ...

  3. quartz集群调度机制调研及源码分析---转载

    quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...

  4. ERP调研之 对话

    开卷语: 2009年8月6号,A公司ERP项目顺利启动,按照项目进度的安排,项目组成员立即投入到紧张而又忙碌的的业务调研之中.这次为期3周的业务调研面向企业所有业务部门,包括产品部门.采购部门.计划部 ...

  5. 定时组件quartz系列<三>quartz调度机制调研及源码分析

    quartz2.2.1集群调度机制调研及源码分析引言quartz集群架构调度器实例化调度过程触发器的获取触发trigger:Job执行过程:总结:附: 引言 quratz是目前最为成熟,使用最广泛的j ...

  6. (1)quartz集群调度机制调研及源码分析---转载

    quartz2.2.1集群调度机制调研及源码分析 原文地址:http://demo.netfoucs.com/gklifg/article/details/27090179 引言quartz集群架构调 ...

  7. 为什么会需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  8. 消息队列一:为什么需要消息队列(MQ)?

    为什么会需要消息队列(MQ)? #################################################################################### ...

  9. 企业业务数据处理用“work”还是“MQ”

    近期公司在做架构梳理已经项目架构方向,不知不觉就引起了使用“work”跑数据还是用“MQ”进行跑数据的争论! 对于争论这件事在各行各业都有,其实我觉得针对“争论”这个词的根源在于一件事情有很多解决方案 ...

随机推荐

  1. [转]Filter 过滤器

    1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...

  2. 清理kafka zookeeper

    ; ; /; rm -rf /app/zookeeper/logs/*; rm -rf /app/pet_kafka_emds2_cluster/kafka-logs/*; rm -rf /app/p ...

  3. processing fill()和stroke()函数

    在procesiing有两个基本的函数,fill()和stroke()函数,这两个函数分别用来控制形状填充颜色和形状轮廓的颜色,fill()和stroke()可以接受的参数的个数为1,2,3.当参数的 ...

  4. shell - 常识

    一.用户登陆进入系统后的系统环境变量: $HOME 使用者自己的目录 $PATH 执行命令时所搜寻的目录 $TZ 时区 $MAILCHECK 每隔多少秒检查是否有新的信件 $PS1 在命令列时的提示号 ...

  5. Android 开发日常积累

    Android 集合 Android 开源项目分类汇总 扔物线的 HenCoder 高级 Android 教程 hencoder HenCoder:给高级 Android 工程师的进阶手册 Andro ...

  6. vue-webpack快速建立项目模板

  7. 从头开始学习vue-router

    一.前言 要学习vue-router就要先知道这里的路由是什么?为什么我们不能像原来一样直接用标签编写链接哪?vue-router如何使用?常见路由操作有哪些?等等这些问题,就是本篇要探讨的主要问题. ...

  8. Webservice超时问题

    Winform客户端调用Webservice 120秒超时.对此问题,针对服务器与客户端分别作了超时设置为300S. 1. 服务器端设置超时 在 web.config 的 system.web 里添加 ...

  9. iOS9中怎样注冊远程通知

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) 在以往的版本号中,我们能够通过: [[UIApplicatio ...

  10. Android使用Custom debug keystore

    有时候须要用到第三方API的时候,须要一个key store 的SH1值,比如使用百度地图API,假设是协同开发,就须要全部Eclipse使用同一keystore. 例如以下图所看到的: 这里须要注意 ...