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. 验证码识别 图像降噪 Python (一)

    原始图片: 降噪后的图片 实现代码: # coding:utf-8 import sys, os from PIL import Image, ImageDraw # 二值数组 t2val = {} ...

  2. 针对MSHFlexGrid的一系列通用方法-项目中实践代码分享

    1.给MSHFlexGrid填充数据通用方法 '自定义报表填充程序 fgrid Public Function ShowformfData(Resultset As ADODB.Recordset, ...

  3. HEVC (H.265)介绍(转)

    [Liupin]: 这是一篇简单介绍H.265文章,我接触和开发H.265二年来,H.265技术在行业内接收速度比H.264快多了,现在国际和国内各大公司都在进行H.265应用,不管是IC设计还是H. ...

  4. django -- 联合索引

    一.定义: from django.db import models # Create your models here. class Person(models.Model): first_name ...

  5. Android 架构师技能图谱(转载)

    架构与设计 设计模式 重构 技术选型 特性 可用性 性能 包大小 方法数 文档 技术支持 UI架构模式 MVC MVP MVVM 研发工具 集成开发环境 Android Studio Sublime ...

  6. 牛腩学Kotlin做Android应用

    牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...

  7. 菜鸟调错(六)——Hibernate 4.3.x 注解常见错误及解决方案

    编程的过程免不了遇到各种错误,各种问题,而遇到问题,解决问题的这个过程我认为是最让人兴奋的事情.越棘手的问题,解决以后带来的快感也越大.当一个问题你搞了一下午或者一天,甚至几天,当你解决的那一刻你会觉 ...

  8. Debugging Java Native Memory Leaks

    GZIP造成JAVA Native Memory泄漏案例 https://www.elastic.co/blog/tracking-down-native-memory-leaks-in-elasti ...

  9. query compiler

    https://db.in.tum.de/teaching/ws1415/queryopt/chapter3.pdf?lang=de pi3.informatik.uni-mannheim.de/~m ...

  10. [SQL in Azure] Getting Started with SQL Server in Azure Virtual Machines

    This topic provides guidelines on how to sign up for SQL Server on a Azure virtual machine and how t ...