• RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点?


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

     

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

     

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

     

     

    RabbitMQ/Kafka/ZeroMQ 都能提供消息队列服务,但有很大的区别。

     

    在面向服务架构中通过消息代理(比如 RabbitMQ / Kafka等),使用生产者-消费者模式在服务间进行异步通信是一种比较好的思想。

     

    因为服务间依赖由强耦合变成了松耦合。消息代理都会提供持久化机制,在消费者负载高或者掉线的情况下会把消息保存起来,不会丢失。就是说生产者和消费者不需要同时在线,这是传统的请求-应答模式比较难做到的,需要一个中间件来专门做这件事。其次消息代理可以根据消息本身做简单的路由策略,消费者可以根据这个来做负载均衡,业务分离等。

     

    缺点也有,就是需要额外搭建消息代理集群(但优点是大于缺点的

     

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

     

    RabbitMQ 支持 AMQP(二进制),STOMP(文本),MQTT(二进制),HTTP(里面包装其他协议)等协议。Kafka 使用自己的协议

     

    Kafka 自身服务和消费者都需要依赖 Zookeeper

     

    RabbitMQ 在有大量消息堆积的情况下性能会下降,Kafka不会。毕竟AMQP设计的初衷不是用来持久化海量消息的,而Kafka一开始是用来处理海量日志的

     

    总的来说,RabbitMQ Kafka 都是十分优秀的分布式的消息代理服务,只要合理部署,不作,基本上可以满足生产条件下的任何需求。

     

     

    ZeroMQ,本地进程之间的coordination

    RabbitMQ,工作消息队列

    Kafka日志订阅,着重数据流处理

     

     

    处理分布式事务方面,它们哪个更适合呢?是不是可以理解为老牌的RabbitMQ对一致性支持更好好一些!

     

     

    好像很多公司 用zmq 只是用来方便地做socket Twisted 还方便。(比如我们)

     

    但是的确是浪费了zmq 的很多特性。

     

     

    RabbitMQKafka基本上是一类东西,各有优劣,ZeroMQ只是一个网络库,不支持持久化。


  • 相关阅读:
    结构型模式代理&适配器
    创建型模式单例&工厂&建造者&原型
    结构型模式装饰者&桥接&门面
    python中列表(list)的使用
    Win2003 域控制器设置和客户端安装
    Python下冒泡排序的实现
    乔布斯在斯坦福大学毕业典礼上的演讲
    字符串替换
    统计文件中某一字符串出现的次数
    [用户 'sa' 登录失败。原因: 该帐户被禁用]的解决方案
  • 原文地址:https://www.cnblogs.com/lizhensheng/p/11117402.html
Copyright © 2020-2023  润新知