zoukankan      html  css  js  c++  java
  • kafka和rabbitmq对比

    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;

    综上,kafka和rabbitmq适应场景不同,kafka适用于高吞吐量场景,rabbitmq适用于对可靠性要求高的场景,综合来讲kafka由于其超高的效率和offset、分区的灵活性,更多的得到了开发者的青睐。

  • 相关阅读:
    arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.
    怎么查询局域网内全部电脑IP和mac地址等信息?
    服务器网页GZIP压缩怎么配置
    windows远程桌面端口修改
    防止ARP欺骗的方法!!!
    怎么查询局域网内全部电脑IP和mac地址..
    DedeTag Engine Create File False提示的种种原因及解决方法
    Native SQL
    冲销物料凭证:'MBST' VS 'MBRL'
    BAPI_GOODSMVT_CREATE物料凭证创建…
  • 原文地址:https://www.cnblogs.com/small-office/p/9429938.html
Copyright © 2011-2022 走看看