Kafka、RabbitMQ、RocketMQ 消息中间件的对比

2023-11-08

什么是消息队列?

消息队列是在消息的传输过程中保存消息的容器,包含以下 3 元素:

  • Producer:消息生产者,负责产生和发送消息到 Broker;

  • Broker:消息处理中心,负责消息存储、确认、重试等,一般其中会包含多个 Queue;

  • Consumer:消息消费者,负责

  • 从 Broker 中获取消息,并进行相应处理。

消息队列模式

  • 点对点模式:多个生产者可以向同一个消息队列发送消息,一个具体的消息只能由一个消费者消费。

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

 

消息队列应用场景

  • 应用解耦:消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节。

  • 异步处理:消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息。

  • 流量削锋:当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的”载体”,在下游有能力处理的时候,再进行分发与处理。

  • 日志处理:日志处理是指将消息队列用在日志处理中,比如 Kafka 的应用,解决大量日志传输的问题。

  • 消息通讯:消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯,比如实现点对点消息队列,或者聊天室等。

  • 消息广播:如果没有消息队列,每当一个新的业务方接入,我们都要接入一次新接口。有了消息队列,我们只需要关心消息是否送达了队列,至于谁希望订阅,是下游的事情,无疑极大地减少了开发和联调的工作量。

常用消息队列

官方社区现在对 ActiveMQ 维护越来越少,较少在大规模吞吐的场景中使用,主要使用 Kafka、RabbitMQ 和 RocketMQ。

消息队列对比 

Kafka

优点:

  • 高吞吐:Kafka 最大的特点就是收发消息非常快,Kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒。

缺点:

  • Kafka 单机超过 64 个队列/分区,Load 会发生明显的飙高现象,队列越多,load 越高,发送消息响应时间变长;

  • 不支持消息路由,不支持延迟发送,不支持消息重试;

  • 社区更新较慢。

RocketMQ

优点:

  • 高吞吐:借鉴 Kafka 的设计,单一队列百万消息的堆积能力;

  • 高伸缩性:灵活的分布式横向扩展部署架构,整体架构其实和 kafka 很像;

  • 高容错性:通过ACK机制,保证消息一定能正常消费;

  • 持久化、可回溯:消息可以持久化到磁盘中,支持消息回溯;

缺点:

  • 不支持消息路由,支持的客户端语言不多,目前是 java 及 c++,其中 c++ 不成熟

  • 社区活跃度一般。

RabbitMQ

优点:

  • 支持几乎所有最受欢迎的编程语言:Java,C,C ++,C#,Ruby,Perl,Python,PHP等等;

  • 支持消息路由:RabbitMQ 可以通过不同的交换器支持不同种类的消息路由;

  • 消息时序:通过延时队列,可以指定消息的延时时间,过期时间TTL等;

  • 支持容错处理:通过交付重试和死信交换器(DLX)来处理消息处理故障;

  • 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker;

  • 社区活跃度高。

缺点:

  • Erlang 开发,很难去看懂源码,不利于做二次开发和维护,基本只能依赖于开源社区的快速维护和修复 bug;

  • RabbitMQ 吞吐量会低一些,这是因为他做的实现机制比较重;

  • 不支持消息有序、持久化不好、不支持消息回溯、伸缩性一般。

消息队列选型

选择rabbitMQ情况,高级灵活的路由规则,需要延迟队列的支持。

RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug,这点对于中小型公司来说十分重要。不考虑rocketmq和kafka的原因是,一方面中小型软件公司数据量没那么大,选消息中间件,应首选功能比较完备的,所以kafka排除。不考虑rocketmq的原因是,rocketmq是阿里出品,如果阿里放弃维护rocketmq,中小型公司一般抽不出人来进行rocketmq的定制化开发,因此不推荐。

语言
kafka使用scala写的,rabbitmq使用erlang写的,rocketMQ使用java写的

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kafka、RabbitMQ、RocketMQ 消息中间件的对比 的相关文章

随机推荐

  • [Vulkan教程] 一: 创建VkDevice

    这个系列的文章是写给对已有的D3D11和GL比较熟悉并理解多线程 资源暂存 同步等概念但想进一步了解它们是如何以Vulkan实现的读者 文章并不追求通俗易懂 里面有很多术语 为了解里面的晦涩内容 建议去阅读Vulkan规范或者更深度的教程
  • 【概率论与数理统计】期末不挂科复习笔记

    概率论与数理统计 期末不挂科复习笔记 只能说最好先看看老师的ppt 在看看猴博士就全懂了 第一章 条件概率 全概率 贝叶斯公式 1 无放回类题目 无放回 直接用C解 2 有放回类题目 有放回 使用 n1 n2 n1 n2 然后乘上每种的概率
  • private static final long serialVersionUID = 1L;是用来做什么的

    private static final long serialVersionUID 1L 是定义以一个序列号 java源码里有大量的类都有这么一个序列号 目的就是把java对象序列化而后进行保存 java的序列化机制式通过判断类的seri
  • IDEA上配置mysql

    IDEA是一个集成工具 它为很多工具提供了快速便捷的配置方式 配置mysql我们只需要添加Database就行了 Database一般是在右侧 找不到的话可以在View中里找到打开 如下图 添加数据库步骤 这里选上mysql 填写相应信息
  • JMeter界面字体大小修改

    1 找到jmeter所在目录 gt bin gt jmeter properties 搜索jsyntaxtextarea font size 去掉 把14改成18 2 修改右侧参数比例 jmeter所在目录 gt bin gt jmeter
  • Spring Boot 整合 Mybatis 实现 Druid 多数据源配置

    目录 1 多数据源的应 场景 2 数据库脚本 3 项目结构 4 代码 依赖 pom xml 配置文件 数据源配置类 实体类 sql映射文件 dao srvice controller 启动类 5 小节 6 事务问解决 1 多数据源的应 场景
  • C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile

    1 环境搭建 1 1VS2019 用的是控制台编译 1 2 msys2 模拟linux的命令和指令 2 源码编译与安装 2 1 x264 ffmpeg 编码用X264 2 2x265 ffmpeg 编码用X265 c 写的 msys2编译
  • 多边形的扫描转化算法

    多边形的扫描转化算法 python 实现 实验目的 实现从多边形顶点表示到点阵表示的转换 从多边形给定的边界出发 通过扫描线的方式求出位于其内部各个像素 从而达到对多边形填充的作用 算法思想 按扫描线顺序 计算扫描线与多边形的相交的交点 这
  • 竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    文章目录 0 简介 1 二维码检测 2 算法实现流程 3 特征提取 4 特征分类 5 后处理 6 代码实现 5 最后 0 简介 优质竞赛项目系列 今天要分享的是 基于机器学习的二维码识别检测 opencv 二维码 识别检测 机器视觉 该项目
  • Linux性能测试工具-UnixBench--安装以及结果分析

    UnixBench unixbench是一个用于测试unix系统性能的工具 也是一个比较通用的benchmark 此测试的目的是对类Unix 系统提供一个基本的性能指示 很多测试用于系统性能的不同方面 这些测试的结果是一个指数值 index
  • pcb叠层设计及资料输出

    PCB叠层设计 一 4层板 方案1 top gnd pwr bottom 此方案也是最常见的 主要元器件和关键信号在top 方案2 top pwr gnd bottom 此方案是主要元器件放bottom 很少用 方案3 gnd s1 pwr
  • 区块链技术系列(1) - 数字签名

    导读 在现实社会中 签名作为签名者身份的一种证明 签名代表对签名文件的认可 不可抵赖 理论上签名是可信 不可伪造的 现在网络环境越来越广泛 有大量的信息通过网络传播 并且会保存在上面 这些电子数据显然无法人工签名 数字签名就孕育而生 本文将
  • SpringBoot常用注解

    前言 Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化新Spring应用的初始搭建以及开发过程 应用于快速应用开发领域 所需支持 Maven构建提供支持或Gradle 不懂Maven或者Gradle 的建议还
  • 基于全连接孪生网络的目标跟踪(siamese-fc)

    Fully Convolutional Siamese Networks for Object Tracking 这两年可以说deeplearning已经占领了visual object tracking这个领域 但是对于跟踪问题来说 这些
  • 在.NET Framework中的连接字符串ConnectionStrings属性

    在 NET Framework中 ConfigurationManager ConnectionStrings属性是用来访问在Visual Studio IDE应用程序配置文件中配置的数据库连接字符串的 每个连接字符串在Visual Stu
  • 建标库标准怎么导出pdf_保存和导出PDF文档,这款OCR文字识别软件能做到

    ABBYY FineReader 作为一款强大的OCR文字识别软件 如果能运用到大家的办公中 将能帮助大家将各种格式的PDF文档保存为新的PDF文档 PDF A格式文档 以及Microsoft Word Excel PPT等格式 在保存与导
  • spring 的@componentscan, @import, @configuration总结

    缝合怪 本人百度总结了几篇文章 对几篇文章进行汇总缝合总结 configuration 这个注解用来代替spring容器的xml配置文件 具体就是配置文件中的
  • VM VirtualBox 全屏模式 && 自动缩放模式 相互切换

    1 自动缩放模式 热键Host C 偶然一次机会 把虚拟机切换为了自动缩放模式 如下图 想要再切换为全屏模式 发现不知如何操作 后来折腾了一会儿 切换成功 以此备录一下 2 切换为全屏模式 热键Host F 切换为全屏模式的快捷键为Host
  • liveshare开发体验 vs_imgcook体验

    D2今年收费了 我所在创业公司没有报销 当然门票也不是什么大钱 无奈忙成狗错过了早鸟票 指望后面看看分享ppt 无意中看到D2官方流出的一个感兴趣的网址 说是 可以由视觉稿一键生成代码 https imgcook taobao org 创业
  • Kafka、RabbitMQ、RocketMQ 消息中间件的对比

    什么是消息队列 消息队列是在消息的传输过程中保存消息的容器 包含以下 3 元素 Producer 消息生产者 负责产生和发送消息到 Broker Broker 消息处理中心 负责消息存储 确认 重试等 一般其中会包含多个 Queue Con