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、分区的灵活性,更多的得到了开发者的青睐。

    选自https://www.cnblogs.com/small-office/p/9429938.html

  • 相关阅读:
    idea教程--面板介绍
    idea教程--使用mave创建普通java项目
    【Spring】Spring中的Bean
    【Spring】创建一个Spring的入门程序
    【Spring】 Spring的核心容器
    【玩转算法】1、总结,算法思想,加油
    【高级排序算法】3、归并排序法的优化
    【高级排序算法】2、归并排序法的实现-Merge Sort
    【高级排序算法】1、归并排序法
    【排序基础】6、插入排序法的改进与选择排序的效率比较
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/10935081.html
Copyright © 2011-2022 走看看