RabbitMQ和Kafka对比以及场景使用说明

我目前的项目最后使用的是RabbitMQ,这里依然是结合网上大神们的优秀博客,对kafka和rabbitmq进行简单的比对。最后附上参考博客。

    1.架构模型

    rabbitmq

    RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;

    Kafka

    kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据

     2.消息确认机制

    rabbitmq

    具有生产者confirm机制以及消费者的消息应答机制ack。

    Kafka

    不具有应答机制。

    3.消息的顺序

    rabbitmq

    在一个队列里面,rabbitmq的消息是严格顺序的,按照先进先出。

    kafka

    在同一个partition中消息是有序的,但是生产者put到Kafka中数据会分布在不同的partition中,所有总体是无序的。

    4.吞吐量

    rabbitmq

    根据测试,RabbitMQ在不使用ACK机制的,Msg大小为1K的情况下,QPS可达6W+。再双方ACK机制,Msg大小为1K的情况下,QPS瞬间降到了1W+。

    Kafka

    Kafka具有巨大的吞吐量,数据的存储以及获取是本地磁盘的批量处理,可以达到百万/s。

    5.可靠性

    rabbitmq

    RabbitMQ使用了MirrorQueue的机制,也可以做到多个机器进行热备。

     Kafka

    Kafka的broker支持主备模式。

    7.持久化

    rabbitmq

    支持

    kafka

    Kafka 是一个持久性消息存储。

     

    对于他们的使用场景如下

    rabbitmq       

 

1.RabbitMQ的消息应当尽可能的小,并且只用来处理实时且要高可靠性的消息。

2.消费者和生产者的能力尽量对等,否则消息堆积会严重影响RabbitMQ的性能。

3.集群部署,使用热备,保证消息的可靠性。

 

kafka

 

1.应当有一个非常好的运维监控系统,不单单要监控Kafka本身,还要监控Zookeeper。(kafka强烈的依赖于zookeeper,如果zookeeper挂掉了,那么Kafka也不行了)

2.对消息顺序不依赖,且不是那么实时的系统。

3.对消息丢失并不那么敏感的系统。

4.从 A 到 B 的流传输,无需复杂的路由,最大吞吐量可达每秒 100k 以上。

posted @ 2018-12-29 12:49  代码工人有力量  阅读(4044)  评论(0编辑  收藏  举报