MQ在项目中的应用很广泛,本人所在项目组使用的是ActiveMQ,可是后面介绍的RabbitMQ。。。安全
一、异步处理服务器
二、流量削峰、秒杀架构
三、日志处理,推荐kafka并发
四、应用解耦异步
咱们从服务性能、数据存储、集群结构三个方面去对比,选择适合本身项目的消息中间件socket
特色:分布式
早期主流的消息中间件,包括ZeroMQ,可是这几年使用的不多了,主要在长期维护的项目中使用。API丰富,自己很成熟可是在高并发、大数据高并发
环境下的性能不够出色,主要试用于中小型项目,有较低的几率丢失数据,最主要是的,官方如今维护的频率一直在下降,好几个月才发布一个版本。性能
架构:学习
一、Master-Slave模式,经过Zookeeper实现节点切换和故障转移
二、NetWork模式,至关于多套Master-Slave模式,经过NetWork网关进行集成
特色:
基于pull模式来处理消息消费,追求高吞吐量,开始的目的是日志采集和传输,0.8版本开始支持复制,不支持事务,对消息的重复、丢失
、错误没有严格要求,适合大数据服务的数据计算、日志采集业务
topic数量从几十到几百的时候,吞吐量会大幅度降低,自己支持的功能比较简单,可能有消息重复消费
集群:
经过zookeeper集群管理多个kafka节点,节点之间相互replication
特色:
纯Java开发,具有高吞吐量(10W级别)、高可用性、适合大规模分布式系统应用的特色。思路起源于kafka,对事务的可靠性传递和事务性
进行优化,在阿里巴巴普遍应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,可是商业版收费
MQ功能较为完善,拓展性好,由于是分布式的,接口简易,支持复杂的MQ业务场景,自己是阿里出品,品质有所保障
社区维护通常,没有特别活跃,并且万一像以前的Dubbo同样,没人维护了,就凉了(Dubbo如今已经从新维护,接连发布不少版本)
集群:
master-slave、2M-2S、多主多从等
特色:
开源的消息代理和队列服务器,在普通协议在不一样的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好,和原生socket
同样好的延迟响应效果),遵照AMQP协议,AMQP主要特征是面向消息、队列、路由(点对点的发布/订阅)、可靠性、安全。适合对数据一致性、
稳定性(100%消息投递)和可靠性要求很高的场景,对性能和吞吐量的要求其次。
优势:
能达到几万级别的吞吐量(和具体的机器配置有关),可是相比kafka和RocketMQ差了很多,由于采用Erlang,时延性是微秒级别,
最重要的是有专门的可视化界面,很方便进行管理,社区很是活跃,功能很完备
缺点:
吞吐量的问题,由于是Erlang语言开发,很难去查看源码。若是存在什么问题,只能等官方去解决,对其掌控度很低,可是社区活跃
度很高,这个影响也不大的
综上:
若是是大数据确定推荐kafka,kafka是业内的标准,绝对没问题。
而RocketMQ更加优秀,可是好像商业版收费,社区有黄掉的风险,适合大公司对本身的技术实力有很大自信的,能够本身维护扩展
RabbitMQ方面,Erlang语言是一个限制,毕竟国内精通这个的很少,好在是开源的,稳定支持,适合中小型公司吧
本人比较喜欢RocketMQ的,虽然这个系列是学习RabbitMQ,之后确定仍是学习RocketMQ,相对RabbitMQ优势很明显。
关于三者详细对比,能够参考:经常使用MQ产品的对比,里面表格对比显示的很详细