RabbitMQ/Kafka/ZeroMQ 区别

本质上都是MQ,但区别也较大,解决的问题不一样,层次不同。除了编程语言和执行性能的区别之外,最大的区别:

1、通信模式的区别常见消息队列实现了pub/sub模式,而zeromq提供了若干种。

2、有没有broker的区别常见消息队列是由broker来代理消息的持久化和转发的,而zeromq没有broker。但是你也不能说zeromq不是mq,或者说“zeromq在mq之下”、“仅仅是个网络库”,只要有先进先出+消息(不是流),就都可以自称是mq。

3、分布式一致性的区别常见分布式消息队列的broker之间通过zookeeper、raft等实现了分布式一致性,分布式管理已经替你解决了。在构建分布式系统时,如果需要一个解耦的、可分布式扩展的消息系统,此时,zeromq没有提供分布式管理功能。这个场景下,和企业级MQ相比,zeromq显得更像一个易用的socket而已,但你不能否认zeromq实现了mq的核心功能——消息(而不是流)+先进先出。其他有诸如持久化等等区别,但和分布式特性类似,且更加远离MQ的本质概念范畴了。只是说,为了满足现在大规模系统的需要,消息层往往需要分布式和持久化等等很多很多保障,所以给MQ加了很多附加要求,但是始终牢记,MQ的本质就是消息+队列。

RabbitMQ 选型和对比

1.从社区活跃度

按照目前网络上的资料,RabbitMQ
、activeM
、ZeroMQ
三者中,综合来看,RabbitMQ
是首选。

2.持久化消息比较

ZeroMq
不支持,ActiveMq
和RabbitMq
都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。

3.综合技术实现

可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统等等。
RabbitMq
/ Kafka
最好,ActiveMq
次之,ZeroMq
最差。当然ZeroMq
也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。

4.高并发

毋庸置疑,RabbitMQ
最高,原因是它的实现语言是天生具备高并发高可用的erlang
语言。

5.比较关注的比较, RabbitMQ 和 Kafka

RabbitMq
比Kafka
成熟,在可用性上,稳定性上,可靠性上, RabbitMq胜于 Kafka] (理论上)。
另外,Kafka
的定位主要在日志等方面, 因为Kafka
设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq

还有就是,Kafka
的性能(吞吐量、TPS
)比RabbitMq
要高出来很多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 10,805评论 0 34
  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 14,397评论 8 167
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • Kafka系列一- Kafka背景及架构介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。...
    raincoffee阅读 6,623评论 0 22
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 585,829评论 51 787