消息列队组件的一些特性比较
RabbitMQ
基于AMQP实现,传统的messaging queue系统实现,基于Erlang。老牌MQ产品了。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。
Kafka
linkedin开源的MQ系统,主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。
ZeroMQ
只是一个网络编程的Pattern库,将常见的网络请求形式(分组管理,链接管理,发布订阅等)模式化、组件化,简而言之socket之上、MQ之下。对于MQ来说,网络传输只是它的一部分,更多需要处理的是消息存储、路由、Broker服务发现和查找、事务、消费模式(ack、重投等)、集群服务等。
NSQ
基于Go语言的分布式实时消息平台,可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。 NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。
Redis
是一个Key-Value的NoSQL数据库,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,比如Stack Overflow 使用列队特性与WebSocket结合推送消息与更新缓存策略。
备注:除 RabbitMq、ActiveMQ、RocketMQ、KafKa、Pulsar 外,其他的消息系统还包括 NSQ(不提供多副本机制,默认不进行持久化)、EMQ、Kestrel(一般作为队列)、NATS(默认无持久化方案,需要用 NATS Streaming 和 Liftbridge 为 NATS 提供了持久化的、多副本的消息存储支持)等。
REFER:
https://taskqueues.com/#brokers
https://github.com/apache/pulsar
https://github.com/apache/kafka
https://github.com/apache/rocketmq
https://github.com/nsqio/nsq
https://github.com/nats-io/nats-serverNSQ:分布式的实时消息平台
http://www.infoq.com/cn/news/2015/02/nsq-distributed-message-platform/
Apache Kafka:下一代分布式消息系统
http://www.infoq.com/cn/articles/apache-kafka
Kafka是个奇葩!——Linkin论文学习笔记
http://my.oschina.net/HardySimpson/blog/306761
RabbitMQ和NSQ的一些特点的比较
http://datastream.github.io/articles/mq-in-cloud
RabbitMQ与Redis队列对比
http://www.cnblogs.com/chinaboard/p/3819533.html
【消息队列MQ】各类MQ比较
http://blog.csdn.net/sunxinhere/article/details/7968886
消息队列设计精要
http://tech.meituan.com/mq-design.html