Kafka 与 RabbitMQ 如何做选择

前言

我们在工作中经常会用到异步消息,主要使用两种消息模式:

  • 消息队列

  • 发布/订阅

消息队列:多个生产者可以向同一个消息队列发送消息,但是一个消息只能被一个消费者消费。

发布/订阅:一个消息可以被多个订阅者并发的获取和处理。

Kafka 和 RabbitMQ 都能满足如上的特性,那么我们应该如何选择使用哪一个?这两个 MQ 有什么差异性?在什么样的场景下适合使用 Kafka,什么场景下适合使用 RabbitMQ ?你是否有这样的疑惑?希望这篇文章能够帮助到你。

如何选择?

开发语言

Kafka:Scala,支持自定义的协议。

RabbitMQ:Erlang,支持 AMQP、MQTT、STOMP 等协议。

延迟队列

如果你有以下这样的需求场景:

生成订单 60 秒后,给用户发短信。

用户 7 天未登录给用户做召回推送。

下单 15 分钟后,未进行付款就关闭订单。

请选择 RabbitMQ,官方已提供延迟队列插件(x-delayed-message),开箱即用。

消息顺序性

如果你的需求场景是需要保证消息是有序的,例如:传递的消息是 MySQL binlog,这种消息不允许是错乱的。

请选择 Kafka,它能够保证发送到相同主题分区的所有消息都能够按照顺序处理。

优先级队列

如果你的需求场景是需要保证消息执行的优先级,例如:首先需要处理 VIP 客户的问题,然后再处理普通客户的问题。

请选择 RabbitMQ,创建队列时可设置 x-max-priority。

消息留存

如果你的需求场景是消费后的消息不马上删除而是希望能够多保留一段时间。

请选择 Kafka,它能够给每个主题配置超时时间,只要没有达到超时时间的消息都会保留下来,请放心 Kafka 的性能不依赖于存储大小,理论上它存储消息几乎不会影响性能。

消息过滤

如果你的需求场景是对接收的消息采取一定的过滤规则进行过滤。

请选择 RabbitMQ,因为它支持消息路由。不过对于 Kafka 而言,也可以通过其他方式实现。

可伸缩行

如果你的需求场景是对伸缩方面、吞吐量方面有极大的要求。

请选择 Kafka。

小结

本文纯属抛砖引玉,有问题,欢迎批评指正。

希望在两者的使用选择上能够给你带来一些思路。

作者:新亮笔记
链接:https://juejin.cn/post/7001296929342619685
来源:掘金

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KafkaRabbitMQ是两种流行的消息队列系统,用于实现异步消息传递。它们有一些相似之处,但也有一些重要的区别。 Kafka是由LinkedIn开发的分布式发布订阅消息系统,设计初衷是处理大规模的实时数据流。它使用高性能的持久化日志来存储消息,并提供高吞吐量和低延迟的数据处理能力。Kafka具有高可靠性、可伸缩性和容错性,并且支持水平扩展。它适用于大规模数据管道、实时流处理和日志聚合等场景。 RabbitMQ是一个开源的消息代理系统,实现了高度可靠的消息传递机制。它支持多种消息协议,包括AMQP、STOMP、MQTT等,并提供了丰富的功能和灵活的路由选项。RabbitMQ使用基于队列的消息模型,消息发送者将消息发送到队列中,而接收者则从队列中接收和处理消息。它适用于中小规模应用和复杂的消息路由场景。 两者之间的主要区别在于架构设计和适用场景。Kafka的设计目标是高吞吐量和低延迟,适用于大规模数据处理和实时流处理。它将消息以日志文件形式持久化存储,支持多个消费者并行读取消息。RabbitMQ则更加注重消息传递的可靠性和灵活性,适用于中小规模应用和复杂的消息路由需求。 总的来说,选择Kafka还是RabbitMQ取决于你的具体需求。如果你需要处理大规模数据流、实时流处理或日志聚合等场景,Kafka可能更适合。而如果你需要一个可靠的消息传递系统,并且对消息路由和协议的灵活性有较高的要求,那么RabbitMQ可能更适合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值