Ckafka
Kafka是linkedin开源的MQ系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。
整体架构图
主流消息队列对比
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
https://blog.csdn.net/kwame211/article/details/78047875
CMQ
消息队列 CMQ 七大功能实践案例 http://www.sohu.com/a/198167501_756465
浅析腾讯云分布式高可靠消息队列服务CMQ架构 来自
RocketMQ
是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给Apache基金会,已经于2016年11月成为 Apache 孵化项目,相信RocketMQ的未来会发挥着越来越大的作用,将有更多的开发者因此受益。
来自
RocketMQ与Kafka对比(18项差异)来自
http://rocketmq.apache.org/
RabbitMQ
是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现来自
RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。
系统架构
RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
来自
其他:
ActiveMQ 开源
作为经典的MOM(Message Oriented Middleware),ActiveMQ还是在企业应用中出场率很高的。
ActiveMQ,是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 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包即可。
特点: 高到离谱的吞吐量、可自行开发持久化、支持数据量较小的持久化、不过只是保存到内存中。除了点对点 即:请求-应答模式 是一对一 、不可有消息丢失 、其他都没有对消息丢失做强烈的保证、官方给出的观点:我们希望消息的尽快送达、而不介意消息的丢失
来自
ZeroMQ只是一个网络编程的Pattern库,将常见的网络请求形式(分组管理,链接管理,发布订阅等)模式化、组件化,简而言之socket之上、MQ之下。对于MQ来说,网络传输只是它的一部分,更多需要处理的是消息存储、路由、Broker服务发现和查找、事务、消费模式(ack、重投等)、集群服务等。
ZeroMQ(∅MQ),你们看这名字,说的是没有mq,还非说它是mq,这动点脑子好么。zmq是支持fanout、topic这些功能的高级socket,不再是传统socket的点到点通信了,于是乎似乎有了mq语义。但是,mq作为一个服务,重要意义是解耦系统中的不同服务,然而zmq不是一个独立服务进程,自然没有mq这种在中间解耦的能力。
ZeroMQ 和 RabbitMQ/Kafka 不同,它只是一个异步消息库,在套接字的基础上提供了类似于消息代理的机制。使用 ZeroMQ 的话,需要对自己的业务代码进行改造,不利于服务解耦。
来自
ZeroMQ是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。ZeroMQ非常灵活,但是你必须学习它的80页的手册(如果你要写一个分布式系统,一定要阅读它)。
来自
http://zeromq.org/intro:get-the-software
https://github.com/zeromq/libzmq
四大模型以及很多改进模型 有固定的一些匹配的socket对
重要参考:
获取sample
作者推出的新模型
性能分析
发布订阅模式
推拉模式
请求回应模式
消息结构体
MetaQ
是一款完全的队列模型消息中间件,服务器使用Java语言编写,可在多种软硬件平台上部署。客户端支持Java、C++编程语言。单台服务器可支持1万以上个消息队列,通过扩容服务器,队列数几乎可任意横向扩展。每个队列都是持久化、长度无限(取决于磁盘空间大小)、并且可从队列任意位置开始消费
Solace、Tibco RV, Tibco EMS,29West
这些是量化交易里面 用到的
如果共享内存的话会用memory mapped file像chronicle
来自
对比
消息中间件的技术选型心得-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 |
- |
- |
- |
来自
其他
Redis和消息中间件
来自
消息中间件的一些理解
来自