当前位置: 首页 > news >正文

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ

特点:

  • AMQP协议:RabbitMQ是基于AMQP(高级消息队列协议)构建的,支持多种消息传递模式,如发布/订阅、路由、RPC等。
  • 多语言支持:支持多种编程语言的客户端库,包括Java、Python、Node.js、Go等。
  • 易用性:RabbitMQ的配置和使用相对简单,适合中小规模的应用。
  • 持久化与可靠性:支持消息持久化,确保消息在系统故障时不会丢失。它还提供了多种消息确认机制(如ACK),以保证消息的可靠传递。
  • 灵活性:RabbitMQ提供了丰富的路由规则和交换器类型(如Direct、Fanout、Topic、Headers),可以根据不同的业务需求灵活配置消息路由。
  • 社区支持:RabbitMQ由VMware开发,后来捐赠给Pivotal Software,拥有活跃的社区和良好的文档支持。

适用场景:

  • 中小型应用:RabbitMQ适合处理中小规模的消息队列需求,特别是在需要复杂的消息路由和灵活的消息传递模式的场景中。
  • 微服务架构:RabbitMQ常用于微服务之间的异步通信,尤其是在需要解耦服务和处理异步任务的场景中。
  • 企业级应用:RabbitMQ在企业级应用中广泛使用,特别是在金融、电商等行业。

缺点:

  • 性能限制:相比Kafka和Pulsar,RabbitMQ的吞吐量较低,不适合处理大规模数据流。
  • 扩展性:虽然RabbitMQ支持集群,但在大规模分布式环境中,扩展性和性能可能会受到限制。

2、Kafka

特点:

  • 高吞吐量:Kafka以其出色的吞吐量著称,每秒可以处理数十万条消息,特别适合处理大规模数据流。
  • 低延迟:Kafka消息传递的延迟非常低,通常在几毫秒内完成,适合实时数据分析和流处理。
  • 分区与副本:Kafka使用分区(Partition)和副本(Replica)机制来实现水平扩展和高可用性。每个主题可以被分割为多个分区,分区的数据分布在集群中的不同Broker上。
  • 持久化与压缩:Kafka支持消息的持久化存储,并且可以通过批量发送和压缩机制提高传输效率。
  • 生态系统丰富:Kafka拥有庞大的生态系统,与Hadoop、Spark、Flink等大数据工具集成紧密,适合用于日志收集、实时分析等大数据处理场景。
  • ZooKeeper依赖:Kafka依赖ZooKeeper来管理集群元数据和协调选举,但正在开发KIP-500项目以摆脱对ZooKeeper的依赖。

适用场景:

  • 大数据处理:Kafka适合处理海量数据流,特别是在需要实时分析、日志收集、流处理等场景中。
  • 实时分析:Kafka的低延迟特性使其成为实时数据分析的理想选择,尤其是在金融、广告、物联网等领域。
  • 日志收集:Kafka常用于日志收集和聚合,能够高效地处理大量的日志数据。

缺点:

  • 复杂性:随着Partition数量的增加,管理和再平衡的操作可能会变得复杂。
  • 消息顺序:Kafka只提供分区级别的消息顺序保证,在某些情况下可能会导致消息乱序。

3、ActiveMQ

特点:

  • JMS标准:ActiveMQ是一个基于JMS(Java 消息服务)标准的消息队列系统,支持多种消息传递模式,如点对点(P2P)和发布/订阅(Pub/Sub)。
  • 多协议支持:除了JMS,ActiveMQ还支持AMQP、STOMP、MQTT等多种协议,适用于不同的应用场景。
  • 持久化与可靠性:ActiveMQ支持消息持久化,确保消息在系统故障时不会丢失。它还提供了多种消息确认机制(如ACK),以保证消息的可靠传递。
  • 易于集成:ActiveMQ与Java生态系统紧密集成,适合Java应用程序的开发。
  • 插件化架构:ActiveMQ提供了丰富的插件机制,可以根据需要扩展功能,如安全性、监控、消息过滤等。
  • 社区支持:ActiveMQ由Apache软件基金会维护,拥有活跃的社区和良好的文档支持。

适用场景:

  • Java应用:ActiveMQ适合Java应用程序的开发,特别是在需要与JMS兼容的场景中。
  • 企业级应用:ActiveMQ在企业级应用中广泛使用,特别是在需要可靠的消息传递和复杂的集成需求的场景中。
  • 小型到中型应用:ActiveMQ适合处理小型到中型的消息队列需求,特别是在需要灵活的消息传递模式和多协议支持的场景中。

缺点:

  • 性能限制:相比Kafka和Pulsar,ActiveMQ的吞吐量较低,不适合处理大规模数据流。
  • 扩展性:虽然ActiveMQ支持集群,但在大规模分布式环境中,扩展性和性能可能会受到限制。

4、RocketMQ

特点:

  • 高性能:RocketMQ同样具备高吞吐量和低延迟的特点,尤其在处理大规模消息传递方面表现出色。
  • 高可靠性:RocketMQ支持同步双写和异步刷盘两种模式,确保消息不丢失,特别是在电商等场景下表现优异。
  • 顺序写入:所有消息不分主题一律顺序写入commitlog文件,这有助于提高磁盘I/O效率。
  • 队列模型:RocketMQ单机支持最高5万个队列,使得它在处理大量队列时仍能保持稳定的性能。
  • 功能丰富:RocketMQ提供了丰富的功能特性,如消息过滤、事务消息、延迟消息、顺序消息等。这些特性使得RocketMQ能够更灵活地满足各种业务需求。
  • Java生态友好:RocketMQ主要在中国开发者社区中受到广泛关注,与阿里巴巴的其他技术栈(如Dubbo、Spring Cloud Alibaba等)有较好的集成。

适用场景:

  • 电商和金融:RocketMQ适合对数据可靠性、实时性要求较高的场景,如金融交易、订单处理等。
  • 大规模消息传递:RocketMQ能够处理数百万级别的消息队列,适合需要处理大量队列的场景。
  • Java 生态:RocketMQ与Java技术栈紧密集成,适合已经在使用Java技术栈的企业。

缺点:

  • 社区较小:相比Kafka和Pulsar,RocketMQ的社区相对较小,虽然在中国有广泛的用户基础,但在全球范围内的影响力有限。
  • 运维复杂度:RocketMQ的API简单,易于集成,但由于其与阿里巴巴技术栈的紧密集成,在非阿里巴巴技术栈环境中部署和运维的复杂度可能会有所增加。

5、Pulsar

特点:

  • 分层架构:Pulsar采用两层架构,分为Broker层和BookKeeper层。Broker层负责接收和发送消息,BookKeeper层则负责存储消息,并处理副本的复制和恢复。这种架构使得计算和存储可以独立扩展,降低了扩展的复杂性。
  • 强一致性:Pulsar提供严格的消息顺序保证,特别是在跨多个分区的情况下。这对于需要强一致性的应用场景(如金融交易、订单处理等)非常重要。
  • 多租户支持:Pulsar内置了丰富的多租户支持,包括租户、命名空间的概念,可以为不同的租户设置资源配额、访问控制等。这对于云环境和大型企业内部的复杂场景非常有用。
  • 跨地域部署:Pulsar专门为跨地域部署设计,提供了强大的全球复制能力,能够轻松实现跨多个数据中心的消息传递。
  • 低延迟与高吞吐量:根据一些基准测试,在相同条件下,Pulsar的吞吐量比Kafka高出40%到60%,并且平均延迟通常比Kafka低50%以上,特别是在高并发场景下表现更佳。(注:吞吐量(Throughput)指的是在单位时间内系统能够处理的工作量或数据量,是衡量系统处理能力的一个关键指标。)
  • 云原生友好:Pulsar与Kubernetes等云原生技术栈集成良好,适合现代微服务架构和容器化部署。

适用场景:

  • 跨地域部署:Pulsar适合需要在全球范围内分布的应用,特别是在需要跨多个数据中心的消息传递的场景中。
  • 强一致性:Pulsar适合对消息顺序和一致性要求较高的应用场景,如金融交易、订单处理等。
  • 多租户支持:Pulsar适合需要在同一集群中支持多个独立租户或团队的场景,特别是在云环境中。
  • 云原生架构:Pulsar适合正在向云原生架构转型的企业,特别是那些已经使用容器化、微服务等现代技术栈的企业。

缺点:

  • 学习曲线:Pulsar的架构比Kafka更复杂,初期的学习曲线可能较陡,尤其是对于不熟悉其设计的团队。
  • 社区较小:虽然Pulsar的社区增长迅速,但它仍然相对较小,尤其是在全球范围内的影响力有限。

6、总结

在这里插入图片描述

Kafka、Pulsar、RabbitMQ、ActiveMQ和RocketMQ都是非常优秀的消息队列系统,选择哪一个取决于你的具体需求。Pulsar和Kafka在性能和扩展性方面表现出色,适合处理大规模数据流和实时分析;RabbitMQ和ActiveMQ更适合中小规模的应用和企业级需求;RocketMQ则在电商和金融领域表现出色,特别是在需要高可靠性和大规模消息传递的场景中。

7、如何选择

  • 如果你的应用需要:
    • 高吞吐量和低延迟:Kafka和Pulsar是更好的选择,特别是在处理大规模数据流和实时分析的场景中。
    • 强一致性和多租户支持:Pulsar是更好的选择,特别是在需要跨多个分区的消息顺序保证和多租户支持的场景中。
    • 跨地域部署:Pulsar是更好的选择,特别是在需要在全球范围内分布的应用中。
    • 易用性和简单的运维:RabbitMQ和ActiveMQ是更好的选择,特别是在中小规模的应用中,或者你需要快速上手和简单配置的场景。
    • Java生态友好以及电商金融领域:RocketMQ是更好的选择,特别是在你已经在使用Java技术栈的企业中。

乘风破浪会有时,直挂云帆济沧海!!!

相关文章:

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点: AMQP协议:RabbitMQ是基于AMQP(高级消息队列协议)构建的,支持多种消息传递模式,如发布/订阅、路由、RPC等。多语言支持:支持多种编程语言的客户端库,包括Java、P…...

【力扣每日一题】存在重复元素 II 解题思路

219. 存在重复元素 II 解题思路 问题描述 给定一个整数数组 nums 和一个整数 k&#xff0c;要求判断数组中是否存在两个 不同的索引 i 和 j&#xff0c;使得&#xff1a; nums[i] nums[j]且满足 abs(i - j) < k 如果满足上述条件&#xff0c;返回 true&#xff0c;否则…...

React第二十八章(css modules)

css modules 什么是 css modules 因为 React 没有Vue的Scoped&#xff0c;但是React又是SPA(单页面应用)&#xff0c;所以需要一种方式来解决css的样式冲突问题&#xff0c;也就是把每个组件的样式做成单独的作用域&#xff0c;实现样式隔离&#xff0c;而css modules就是一种…...

本地运行大模型效果及配置展示

电脑上用ollama安装了qwen2.5:32b&#xff0c;deepseek-r1:32b&#xff0c;deepseek-r1:14b&#xff0c;llama3.1:8b四个模型&#xff0c;都是Q4_K_M量化版。 运行过程中主要是cpu和内存负载比较大&#xff0c;qwen2.5:32b大概需要22g&#xff0c;deepseek-r1&#xff1a;32b类…...

愿景:做机器视觉行业的颠覆者

一个愿景&#xff0c;两场战斗&#xff0c;专注制胜。 一个愿景&#xff1a;做机器视觉行业的颠覆者。 我给自己创业&#xff0c;立一个大的愿景&#xff1a;做机器视觉行业的颠覆者。 两场战斗&#xff1a;无监督-大模型 上半场&#xff0c;无监督。2025-2030&#xff0c;共五…...

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu&#xff0c;资源管理器中输入&#xff1a; \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录&#xff1a; /usr/local/arm&#xff0c;命令如下&#xff1a; …...

力扣动态规划-16【算法学习day.110】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…...

Java基础知识总结(三十四)--java.util.Date

月份从0-11&#xff1b; /* 日期对象和毫秒值之间的转换。 1&#xff0c;日期对象转成毫秒值。Date类中的getTime方法。 2&#xff0c;如何将获取到的毫秒值转成具体的日期呢&#xff1f; Date类中的setTime方法。也可以通过构造方法。 */ //日期对象转成毫秒值 Date …...

零售EDI:Costco EDI 项目须知

Costco 是全球领先的会员制仓储式零售商&#xff0c;致力于为会员提供高品质且价格实惠的商品。其经营范围涵盖食品、电子产品、家居用品、服装和办公设备等多个领域。 Costco 的 EDI 对接需求分析 为了更高效地管理其复杂的全球供应链&#xff0c;Costco 采用了先进的 EDI&am…...

最近最少使用算法(LRU最近最少使用)缓存替换算法

含义 最近最少使用算法&#xff08;LRU&#xff09;是一种缓存替换算法&#xff0c;用于在缓存空间有限的情况下&#xff0c;选择最少使用的数据项进行替换。该算法的核心思想是基于时间局部性原理&#xff0c;即刚被访问的数据在未来也很有可能被再次访问。 实现 LRU算法的…...

sublime_text的快捷键

sublime_text的快捷键 向下复制, 复制光标所在整行并插入到下一行&#xff1a;通过 CtrlShiftD 实现快速复制当前行的功能。 可选多行, 不选则复制当前行 ctrl Shift D 删除当前行&#xff1a;通过 CtrlShiftK 实现快速删除当前行的功能。 可选多行, 不选则删当前行 ctrl S…...

使用Pygame制作“贪吃蛇”游戏

贪吃蛇 是一款经典的休闲小游戏&#xff1a;玩家通过操控一条会不断变长的“蛇”在屏幕中移动&#xff0c;去吃随机出现的食物&#xff0c;同时要避免撞到墙壁或自己身体的其他部分。由于其逻辑相对简单&#xff0c;但可玩性和扩展性都不错&#xff0c;非常适合作为新手练习游戏…...

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操

本地部署DeepSeek开源多模态大模型Janus-Pro-7B实操 Janus-Pro-7B介绍 Janus-Pro-7B 是由 DeepSeek 开发的多模态 AI 模型&#xff0c;它在理解和生成方面取得了显著的进步。这意味着它不仅可以处理文本&#xff0c;还可以处理图像等其他模态的信息。 模型主要特点:Permalink…...

Java开发vscode环境搭建

1 几个名词 JDK Java Development Kit JRE Java Runtion Environment JVM JDK 包括 Compiler,debugger,JRE等。JRE包括JVM和Runtime Library。 2 配置环境 2.1 安装JDK 类比 C/C的 g工具 官网&#xff1a;https://www.oracle.com/java/technologies/downloads/ 根据自己使…...

深入解析:一个简单的浮动布局 HTML 示例

深入解析&#xff1a;一个简单的浮动布局 HTML 示例 示例代码解析代码结构分析1. HTML 结构2. CSS 样式 核心功能解析1. 浮动布局&#xff08;Float&#xff09;2. 清除浮动&#xff08;Clear&#xff09;3. 其他样式 效果展示代码优化与扩展总结 在网页设计中&#xff0c;浮动…...

车载软件 --- 大一新生入门汽车零部件嵌入式开发

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…...

DDD - 领域驱动设计分层架构:构建可演化的微服务架构

文章目录 引言1. 什么是DDD分层架构&#xff1f;1.1 DDD分层架构的演变1.2 四层架构的起源与问题1.3 依赖倒置和五层架构 2. DDD分层架构的核心层次2.1 用户接口层&#xff08;User Interface Layer&#xff09;2.2 应用层&#xff08;Application Layer&#xff09;2.3 领域层…...

2025数学建模美赛|赛题翻译|E题

2025数学建模美赛&#xff0c;E题赛题翻译 更多美赛内容持续更新中......

DeepSeek-V3 与 DeepSeek R1 对比分析:技术与应用的全面解析

一、背景 在当今科技飞速发展的时代&#xff0c;深度学习技术如同一股强大的浪潮&#xff0c;席卷了自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;以及多模态模型等众多领域。从智能语音助手到图像识别技术&#xff0c;从文本生成工具到多模…...

qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记

qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记 文章目录 qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记1.例程运行效果2.例程缩略图3.项目文件列表4.main.qml5.main.cpp6.CMakeLists.txt 1.例程运行效果 运行该项目需要自己准备一个模型文件 2.例程缩略图…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数&#xff1a;细心总结条件 力扣题目链接&#xff1a;https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

Heygem50系显卡合成的视频声音杂音模糊解决方案

如果你在使用50系显卡有杂音的情况&#xff0c;可能还是官方适配问题&#xff0c;可以使用以下方案进行解决&#xff1a; 方案一&#xff1a;剪映替换音色&#xff08;简单适合普通玩家&#xff09; 使用剪映换音色即可&#xff0c;口型还是对上的&#xff0c;没有剪映vip的&…...