主流消息队列对比

Ckafka

Kafka是linkedin开源的MQ系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。

整体架构图

主流消息队列对比

    •  
    • RabbitMQ
    • RocketMQ
    • CMQ
    • Kafka
    • 模式
    • 发布订阅
    • 发布订阅
    • 传统queue/发布订阅
    • 发布订阅
    • 同步算法
    • GM
    • 同步双写
    • Raft
    • ISR(Replica)
    • 分布式扩展
    • 支持
    • 支持
    • 支持
    • 堆积能力
    • 磁盘容量
    • 磁盘容量
    • 磁盘(水平扩展)
    • 磁盘(水平扩展)
    • 性能
    • 很高
    • 可靠性
    • 一般
    • 一般
    • 极高
    • 一般
    • 持久化
    • 内存/硬盘
    • 磁盘
    • 磁盘
    • 磁盘

https://blog.csdn.net/kwame211/article/details/78047875

CMQ

消息队列 CMQ 七大功能实践案例 http://www.sohu.com/a/198167501_756465

浅析腾讯云分布式高可靠消息队列服务CMQ架构 来自 <https://www.cnblogs.com/qcloud1001/p/6526779.html>

 

 

RocketMQ

是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给Apache基金会,已经于201611月成为 Apache 孵化项目,相信RocketMQ的未来会发挥着越来越大的作用,将有更多的开发者因此受益。

来自 <https://blog.csdn.net/zhglance/article/details/54962870>

RocketMQ与Kafka对比(18项差异)来自 <https://blog.csdn.net/u010144805/article/details/80228847>

http://rocketmq.apache.org/

 

RabbitMQ

是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现来自 <https://blog.csdn.net/whoamiyang/article/details/54954780>

RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。

系统架构

RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。

来自 <https://blog.csdn.net/chszs/article/details/8479072>

其他:

ActiveMQ  开源

作为经典的MOM(Message Oriented Middleware)ActiveMQ还是在企业应用中出场率很高的。

ActiveMQ,是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。

ActiveMQ的下一代产品为Apollo。

HornetQ 开源

JBoss绑定在一起,应用也很普遍。

毕竟JMS是业界标准。

RabbitMQ / ZeroMQ / Disque etc.

毕竟不是说Java应用的所有组件和依赖都要用Java实现。所以你可以去了解下

ZeroMQ 开源

ZeroMQ RFC https://legacy.gitbook.com/book/zeromq/rfc/details

简介:

ZeroMQ号称是“史上最快的消息队列”,基于c语言开发的,实时流处理sorm的task之间的通信就是用的zeroMQ。 引用官方说法,“ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library, 他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。 ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。 但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。 ZMQ让编写高性能网络应用程序极为简单和有趣。” 确实,它跟RabbitMQ,ActiveMQ之类有着相当本质的区别, ZeroMQ根本就不是一个消息队列服务器,更像是一组底层网络通讯库,对原有的Socket API加上一层封装, 是我们操作更简便。使用时只需要引入相应的jar包即可。

特点: 高到离谱的吞吐量、可自行开发持久化、支持数据量较小的持久化、不过只是保存到内存中。除了点对点 即:请求-应答模式 是一对一 、不可有消息丢失 、其他都没有对消息丢失做强烈的保证、官方给出的观点:我们希望消息的尽快送达、而不介意消息的丢失

来自 <https://blog.csdn.net/huoyan403/article/details/76674744>

 

ZeroMQ只是一个网络编程的Pattern库,将常见的网络请求形式(分组管理,链接管理,发布订阅等)模式化、组件化,简而言之socket之上、MQ之下。对于MQ来说,网络传输只是它的一部分,更多需要处理的是消息存储、路由、Broker服务发现和查找、事务、消费模式(ack、重投等)、集群服务等。

ZeroMQ(∅MQ),你们看这名字,说的是没有mq,还非说它是mq,这动点脑子好么。zmq是支持fanout、topic这些功能的高级socket,不再是传统socket的点到点通信了,于是乎似乎有了mq语义。但是,mq作为一个服务,重要意义是解耦系统中的不同服务,然而zmq不是一个独立服务进程,自然没有mq这种在中间解耦的能力。

ZeroMQ 和 RabbitMQ/Kafka 不同,它只是一个异步消息库,在套接字的基础上提供了类似于消息代理的机制。使用 ZeroMQ 的话,需要对自己的业务代码进行改造,不利于服务解耦。

来自 <https://www.zhihu.com/question/22480085>

ZeroMQ是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。ZeroMQ非常灵活,但是你必须学习它的80页的手册(如果你要写一个分布式系统,一定要阅读它)。

来自 <https://blog.csdn.net/chszs/article/details/8479072>

http://zeromq.org/intro:get-the-software

https://github.com/zeromq/libzmq

四大模型以及很多改进模型 有固定的一些匹配的socket对

重要参考:

获取sample

作者推出的新模型

性能分析

发布订阅模式

推拉模式

请求回应模式

消息结构体

MetaQ

是一款完全的队列模型消息中间件,服务器使用Java语言编写,可在多种软硬件平台上部署。客户端支持JavaC++编程语言。单台服务器可支持1万以上个消息队列,通过扩容服务器,队列数几乎可任意横向扩展。每个队列都是持久化、长度无限(取决于磁盘空间大小)、并且可从队列任意位置开始消费

 

SolaceTibco RV, Tibco EMS29West

这些是量化交易里面 用到的

如果共享内存的话会用memory mapped filechronicle

来自 <https://www.zhihu.com/question/37014051?sort=created>

对比

消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ来自 <https://blog.csdn.net/chszs/article/details/8479072>

ActiveMQ, Qpid, HornetQ and RabbitMQ in Comparison http://www.predic8.com/activemq-hornetq-rabbitmq-apollo-qpid-comparison.htm

ActiveMQ

Apollo

HornetQ

Qpid

RabbitMQ

ZeroQ

 

C

-

-

C++

-

-

-

Erlang

-

-

-

-

Haskell

-

-

-

-

Java JMS

-

-

-

Java proprietary

-

-

.NET

-

-

-

Objective-C

-

-

-

-

-

Perl

-

-

-

-

PHP

-

-

-

-

Python

-

-

-

Ruby

-

-

-

 

来自 <https://www.predic8.com/activemq-hornetq-rabbitmq-apollo-qpid-comparison.htm>

其他

Redis和消息中间件

来自 <https://www.cnblogs.com/miguo/p/7083715.html>

消息中间件的一些理解

来自 <https://blog.csdn.net/nsu406096612/article/details/77851258>

 

猜你喜欢

转载自blog.csdn.net/u010144805/article/details/81489404
今日推荐