zoukankan      html  css  js  c++  java
  • rabbitmq和kafka的区别

    1、吞吐量
    kafka吞吐量更高:
      1)Zero Copy机制,内核copy数据直接copy到网络设备,不必经过内核到用户再到内核的copy,减小了copy次数和上下文切换次数,大大提高了效率。
      2)磁盘顺序读写,减少了寻道等待的时间。
      3)批量处理机制,服务端批量存储,客户端主动批量pull数据,消息处理效率高。
      4)存储具有O(1)的复杂度,读物因为分区和segment,是O(log(n))的复杂度。
      5)分区机制,有助于提高吞吐量。

    2、可靠性
    rabbitmq可靠性更好:
      1)确认机制(生产者和exchange,消费者和队列);
      2)支持事务,但会造成阻塞;
      3)委托(添加回调来处理发送失败的消息)和备份交换器(将发送失败的消息存下来后面再处理)机制;

    3、高可用
      1)rabbitmq采用mirror queue,即主从模式,数据是异步同步的,当消息过来,主从全部写完后,回ack,这样保障了数据的一致性。
      2)每个分区都可以有一个或多个副本,这些副本保存在不同的broker上,broker信息存储在zookeeper上,当broker不可用会重新选举leader。
      kafka支持同步负责消息和异步同步消息(有丢消息的可能),生产者从zk获取leader信息,发消息给leader,follower从leader pull数据然后回ack给leader。

    4、负责均衡
      1)kafka通过zk和分区机制实现:zk记录broker信息,生产者可以获取到并通过策略完成负载均衡;通过分区,投递消息到不同分区,消费者通过服务组完成均衡消费。
      2)需要外部支持。

    5、模型
      1)rabbitmq:
        producer,broker遵循AMQP(exchange,bind,queue),consumer;
        broker为中心,exchange分topic,direct,fanout和header,路由模式适合多种场景;
        consumer消费位置由broker通过确认机制保存;
      2)kafka:
        producer,broker,consumer,未遵循AMQP;
        consumer为中心,获取消息模式由consumer自己决定;
        offset保存在消费者这边,broker无状态;
        消息是名义上的永久存储,每个parttition按segment保存自己的消息为文件(可配置清理周期);
        consumer可以通过重置offset消费历史消息;
        需要绑定zk;

    人生如修仙,岂是一日间。何时登临顶,上善若水前。
  • 相关阅读:
    第一次上传文件到linux服务器
    @JsonFormat与@DateTimeFormat的区别
    Tomcat端口被占用处理
    简单的Tomcat部署
    PHP源码加密,zend guard与ioncube
    PHP计算年龄
    My97DatePicker时间控件 JQuery UI
    php二维数组自定义排序
    CodeSmith Generator 7.0.2激活步骤
    SQL Server Management Studio 2008版本的安装
  • 原文地址:https://www.cnblogs.com/f-society/p/10731345.html
Copyright © 2011-2022 走看看