文章目录:

  • 前言

  • 如何选择?

    • 开发语言

    • 延迟队列

    • 消息顺序性

    • 优先级队列

    • 消息留存

    • 消息过滤

    • 可伸缩行

  • 小结

  • 推荐阅读

前言

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

  • 消息队列

  • 发布/订阅

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

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

KafkaRabbitMQ 都能满足如上的特性,那么我们应该如何选择使用哪一个?这两个 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

小结

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

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

推荐阅读

  • 分布式事务之最终一致性实现方案

  • 关于分布式事务的理解

  • 回答两个被频繁问到的代码写法问题

  • 我是怎么写 Git Commit message 的?

Kafka 与 RabbitMQ 如何选择使用哪个?相关推荐

  1. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/qu ...

  2. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://t.cn/RVDWcfe 本文将 ...

  3. activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ

    来自:知乎,作者:Will 链接:https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 ...

  4. 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局

    一.前言 二.各类消息队列简述 三.选型要点概述 四.消息中间件选型误区探讨 一.前言 消息队列中间件(简称消息中间件)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布 ...

  5. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局

    本文收录于InfoQ,未经允许不得转载. 欢迎跳转到本文原文:https://honeypps.com/mq/kafka-vs-rabbitmq/ 一.前言 消息队列中间件(简称消息中间件)是指利用高 ...

  6. kafka消息消费有延迟_消息中间件选型分析---从Kafka与RabbitMQ的对比来看全局

    有很多网友留言:公司要做消息中间件选型,该如何选?你觉得哪个比较好?消息选型的确是一个大论题,实则说来话长的事情又如何长话短说.对此笔者专门撰稿一篇内功心法:如何看待消息中间件的选型,不过这篇只表其意 ...

  7. 消息队列重要机制讲解以及MQ设计思路(kafka、rabbitmq、rocketmq)

    目录 <Kafka篇> 简述kafka的架构设计原理(入口点) 消息队列有哪些作用(简单) 消息队列的优缺点,使用场景(基础) 消息队列如何保证消息可靠传输 死信队列是什么?延时队列是什么 ...

  8. 消息中间件Kafka与RabbitMQ谁更胜一筹?

    在 IM 这种讲究高并发.高消息吞吐的互联网场景下,MQ 消息中间件是个很重要的基础设施,它在 IM 系统的服务端架构中担当消息中转.消息削峰.消息交换异步化等角色. 当然,MQ 消息中间件的作用远不 ...

  9. activemq后台管理 看topic消息_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列...

    作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 ...

最新文章

  1. Android中Intent传值
  2. php directoryiterator,PHP DirectoryIterator getBasename()用法及代码示例
  3. Prototype1.5.1源代码解读分析-1
  4. itext转html为pdf 锚点,ITEXT输出pdf..docx
  5. 四门专业课,有点困难哈~
  6. 通话过程中显示呼叫失败_电销行业如何破局?深海捷云呼叫中心协助企业通过挑战...
  7. ubuntu查看系统位数,版本号——百度
  8. Spring系列之BeanPostProcessor分析
  9. HTML5实现Word中文字全环绕图片效果
  10. 如何使用idea快速创建SpringBoot项目
  11. Android中常见的MVC/MVP/MVVM模式
  12. 基于友善之臂ARM-ContexA9-ADC驱动开发
  13. 容器编排技术 -- 创建Kubernetes集群
  14. centos7+docker+安装mysql5.7
  15. php源码字符串内部表示,PHP源码—implode函数源码分析
  16. [大赛推荐]短视频开发大赛,万元现金大奖等你来拿
  17. Jenkins Mac本地环境搭建
  18. 大数据技术原理与应用(第十章 Spark)
  19. try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
  20. 【问题解决】win服务器磁盘初始化

热门文章

  1. 芝诺数解|「十六」绿水青山就是金山银山——重庆环保
  2. Not a managed type
  3. greenplum segment恢复的过程
  4. VMware的存储野心(下):虚拟卷和闪存缓存
  5. 阿里发布内部(面试官)题库:2022年Java社招岗(正式版)面试题
  6. 手把手带你了解Spark作业“体检报告” --Spark UI
  7. 720实训——智慧消防案例分析
  8. 在2016年度山东省计算机技能大赛中,学院在2016年山东省职业院校技能大赛中再获佳绩...
  9. 本科生晋升GM记录 Kaggle比赛进阶技巧分享
  10. 环境和社会风险分类c类_企业经营风险的定义、种类以及基本分类