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. MySQL Metadata Lock详解

    Metadata Lock 的作用: 要直接说出Metadata Lock 的作用.以我目前的文字功底是不行的.好在我可以通过一个例子来说明. 假设session 1 在正在执行如下的SQL语句 se ...

  2. Maven报错 解决方案。ERROR: No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id

    报错: [ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or ...

  3. gitlab runner 配置

    gitlab runnerhttps://scarletsky.github.io/2016/07/29/use-gitlab-ci-for-continuous-integration/https: ...

  4. Python无限元素列表实例教程

    有关Python中无限元素列表的实现方法. 本文实例讲述了Python怎么实现无限元素列表的方法,具体实现可使用Yield来完成.下面所述的2段实例代码通过Python Yield 生成器实现了简单的 ...

  5. fork failed.: Cannot allocate memory

    在做压力测试时候: [root@666 ok]# webbench -c 5000 -t30 http://10.100.0.61/ Webbench - Simple Web Benchmark 1 ...

  6. mongoose修改数组中某个特定的值

    写博客的时候有一个这样的业务,一个标签集合和一个文章集合,它们是多对多的关系,文章集合中tags字段包含它对应的标签,现在修改标签集合中某条标签记录的名字,文章集合中所有包含这个标签的tags字段的值 ...

  7. 转:Math: Math.atan() 与 Math.atan2() 计算两点间连线的夹角

    我们可以使用正切操作将角度转变为斜率,那么怎样利用斜率来转换为角度呢?可以利用斜率的反正切函数将他转换为相应的角度.as中有两个函数可以计算反正切,我们来看一下. 1.Math.atan() Math ...

  8. FFmpeg(9)-解码器解码代码演示(FFmpeg调用MediaCodec实现硬解码、多线程解码、及音视频解码性能测试)

    一.AVFrame 用来存放解码后的数据. [相关函数] AVFrame *frame = av_frame_alloc();                       // 空间分配,分配一个空间 ...

  9. 解决jar格式文件,双击不能直接运行问题

    前提:  安装了JDK 步骤: 1.先右击jar文件,打开方式->选择默认程序->浏览,选中jre下bin文件中javaw.exe(比如我的javaw.exe在C:\Program Fil ...

  10. Linux下双网卡绑定bond0【转】

    一:原理: linux操作系统下双网卡绑定有七种模式.现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑 ...