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

2022-11-19 13:34:24 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

我目前的项目最后使用的是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

代码语言:javascript复制
1.RabbitMQ的消息应当尽可能的小,并且只用来处理实时且要高可靠性的消息。

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

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

kafka

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181942.html原文链接:https://javaforall.cn

0 人点赞