Kafka和RabbitMQ的异同点和使用场景

一、异同点

1.架构模型

RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心。
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在不使用ACK机制的,Msg大小为1K的情况下,QPS可达6W+。再双方ACK机制,Msg大小为1K的情况下,QPS瞬间降到了1W+。

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

5.可靠性

RabbitMQ使用了MirrorQueue的机制,也可以做到多个机器进行热备。
Kafka的broker支持主备模式。

7.持久化

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

二、使用场景

RabbitMQ

1.RabbitMQ的消息应当尽可能的小,并且只用来处理实时且要高可靠性的消息。
 
2.消费者和生产者的能力尽量对等,否则消息堆积会严重影响RabbitMQ的性能。
 
3.集群部署,使用热备,保证消息的可靠性。

Kafka

1.应当有一个非常好的运维监控系统,不单单要监控Kafka本身,还要监控Zookeeper。(kafka强烈的依赖于zookeeper,如果zookeeper挂掉了,那么Kafka也不行了)
 
2.对消息顺序不依赖,且不是那么实时的系统。
 
3.对消息丢失并不那么敏感的系统。
 
4.从 A 到 B 的流传输,无需复杂的路由,最大吞吐量可达每秒 100k 以上。

谢谢阅读!!!

你可能感兴趣的:(杂记)