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

JMS和消息中间件:Kafka/RocketMQ

文章目录

    • 消息传递模型
    • 使用JMS还是Kafka
    • Kafka与RocketMQ的优缺点
    • Kafka与RocketMQ的使用场景
    • Kafka与RocketMQ的选型指南

TPM 项目中, iflow之间使用了JMS,后端项目与数据库通信使用Kafka

MQ和JMS的区别:
JMS是 java 用来处理消息的一个API规范。市面上绝大数 MOM(Message-Oriented Middleware 消息中间件)都支持.
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。

目前主流的 MQ 主要是 RocketMQ、kafka、RabbitMQ,ActiveMQ

消息传递模型

○ JMS
■ 支持两种主要的消息传递模型:
■ 点对点(P2P)模型:消息生产者将消息发送到一个特定的队列,每个消息只有一个消费者能够接收和处理。这种模型适用于任务分配的场景,例如在一个任务调度系统中,任务生产者将任务消息发送到队列,一个任务执行器作为消费者从队列中获取任务并执行。
■ 发布 / 订阅(Pub/Sub)模型:消息生产者将消息发布到一个主题,多个消息消费者可以订阅这个主题来接收消息。这类似于广播系统,例如在一个新闻发布系统中,新闻生产者将新闻消息发布到主题,多个订阅用户(如新闻客户端)可以接收新闻消息。
○ Kafka
■ 主要基于发布 / 订阅模型,但它也具有一些独特的特点。在 Kafka 中,消息被存储在主题(Topic)下的分区中,消费者可以订阅主题来获取消息。而且消费者可以通过消费者组(Consumer Group)的方式进行组织。同一个消费者组中的消费者共同分担对消息的消费,不同消费者组之间相互独立,都可以完整地消费主题中的消息。例如,在一个数据收集和分析系统中,多个数据收集客户端作为生产者将数据发送到 Kafka 主题,不同的数据分析团队可以组成不同的消费者组从主题中获取数据进行分析。

使用JMS还是Kafka

  1. 应用场景和需求特点
    ○ 简单的异步消息传递场景(选择 JMS)
    ■ 如果你的应用场景主要是在 Java 应用程序之间进行简单的异步通信,并且不需要处理大规模的数据流,JMS 可能是一个合适的选择。例如,在一个小型企业内部的员工任务管理系统中,任务分配模块作为消息生产者将任务消息发送到消息队列(基于 JMS),员工对应的任务处理客户端作为消息消费者从队列中获取任务消息。这种场景下,消息量相对较小,主要关注的是消息的可靠传递和异步处理。
    ○ 大规模实时数据处理场景(选择 Kafka)
    ■ 当需要处理海量的实时数据,如互联网公司的用户行为数据收集、日志处理等场景,Kafka 是更好的选择。以一个大型电商网站为例,每秒可能有成千上万的用户浏览商品、下单等行为,这些行为数据可以作为实时数据流发送到 Kafka 集群。Kafka 能够高效地接收、存储这些数据,并为后续的数据分析、推荐系统等提供数据支持,其分布式架构和高吞吐量的特点可以很好地应对这种大规模的数据处理需求。
  2. 消息传递模型偏好
    ○ 点对点模型主导的场景(倾向 JMS)
    ■ 如果你的应用场景主要依赖点对点的消息传递模型,JMS 的实现可能更符合你的需求。例如,在一个订单处理系统中,订单生成模块将订单消息发送到特定的队列,库存管理模块作为唯一的消费者从队列中获取订单消息来更新库存。这种一对一的消息传递方式在 JMS 中通过队列实现得较为简单直接,而且 JMS 对这种模型的支持历史悠久,相关的事务处理等机制也比较成熟。
    ○ 发布 / 订阅和消费者组应用场景(倾向 Kafka)
    ■ 对于需要灵活运用发布 / 订阅模型并且涉及消费者组的场景,Kafka 具有明显的优势。例如,在一个新闻媒体公司的内容分发系统中,新闻编辑部门作为生产者将新闻消息发布到 Kafka 主题,不同的终端设备(如手机应用、网页浏览器等)可以根据用户的订阅情况组成不同的消费者组从主题中获取新闻消息进行展示。消费者组的设置可以方便地对消息消费进行负载均衡和灵活分配,这是 Kafka 在这种复杂的发布 / 订阅场景中的一个重要优势。
  3. 可靠性和数据持久化要求
    ○ 高可靠性但传统事务处理需求(JMS 可能更合适)
    ■ 如果你的应用对消息传递的可靠性要求很高,并且需要传统的事务处理机制,如在金融领域的交易指令传递等场景,一些 JMS 实现可能更能满足需求。JMS 消息中间件通常提供了成熟的消息确认机制,如自动确认、客户端确认等,并且可以通过与数据库等存储系统结合来实现消息的持久化存储,以确保消息在传递过程中不会丢失,同时保证事务的完整性。
    ○ 高可靠性和大规模数据持久化(Kafka 优势明显)
    ■ 当需要对海量数据进行持久化存储并且保证高可靠性时,Kafka 的优势就体现出来了。例如,在一个云存储服务公司的数据备份系统中,大量的用户文件数据需要进行持久化存储并且要保证数据的安全性和可用性。Kafka 的多副本机制可以确保数据在多个代理(Broker)之间进行备份,并且通过将消息持久化存储在磁盘分区上,能够有效防止数据丢失,同时还能提供高效的数据访问。
  4. 性能和延迟要求
    ○ 对低延迟要求不高,中等性能场景(JMS 可以胜任)
    ■ 如果你的应用对消息传递的延迟要求不是特别严格,并且性能需求处于中等水平,JMS 可能能够满足要求。例如,在一个企业内部的邮件通知系统中,新邮件到达的通知消息通过 JMS 发送到用户的客户端,这里对消息传递的延迟可以容忍几秒甚至更长时间,JMS 在这种场景下可以通过合适的消息中间件实现可靠的消息传递。
    ○ 低延迟、高吞吐量性能需求(Kafka 是优选)
    ■ 对于那些需要在高并发情况下实现低延迟和高吞吐量的应用,如实时竞价系统、物联网数据采集等场景,Kafka 是更好的选择。在物联网场景中,大量的传感器设备需要实时将数据发送到服务器进行处理,Kafka 通过异步发送消息、零拷贝技术等手段能够快速接收和处理这些数据,满足低延迟和高吞吐量的要求。

Kafka与RocketMQ的优缺点

1. Kafka

优点:

高吞吐量:Kafka能够处理每秒数百万条消息,适合大规模数据流处理。
水平扩展性:通过分区机制,Kafka可以轻松扩展,支持大规模分布式部署。
持久化存储:Kafka将消息持久化到磁盘,确保数据的可靠性和持久性。
高可用性:通过复制机制,Kafka能够在节点故障时继续提供服务。
低延迟:Kafka设计为低延迟系统,适合实时数据处理。
缺点:

复杂性:Kafka的部署和管理相对复杂,需要专业知识和经验。
资源占用:Kafka对硬件资源要求较高,特别是磁盘和网络带宽。
延迟一致性:Kafka采用最终一致性模型,可能导致短暂的不一致。

2. RocketMQ

优点:

高可靠性:RocketMQ支持分布式事务和多副本机制,确保消息的高可靠性。
高性能:RocketMQ在处理高并发、高吞吐量场景下表现出色。
顺序消息:RocketMQ支持严格的顺序消息,适用于需要顺序处理的业务场景。
灵活的消费模式:支持多种消费模式,包括广播消费和集群消费。
易于集成:RocketMQ提供丰富的客户端库,易于与现有系统集成。
缺点:

社区活跃度:相比Kafka,RocketMQ的社区活跃度和生态系统较弱。
运维复杂度:RocketMQ的运维和调优需要一定的经验和技巧。
文档和支持:文档和社区支持相对较少,可能需要更多的自主探索。

Kafka与RocketMQ的使用场景

Kafka使用场景:

实时数据处理:需要处理高吞吐量、低延迟的数据流,如实时日志分析、实时监控和实时推荐系统。
大数据管道:构建数据管道,将数据从不同来源高效传输到数据湖或数据仓库。
事件驱动架构:实现事件驱动的微服务架构,支持事件的发布和订阅。
日志聚合:集中收集和处理分布式系统的日志数据,进行统一分析和监控。
RocketMQ使用场景:

金融交易系统:需要高可靠性和顺序消息处理的金融交易系统。
电商平台:处理高并发订单和支付消息,确保消息的可靠传递和顺序处理。
分布式事务:支持分布式事务的业务场景,如跨服务的事务管理。
消息通知系统:实现高可靠性的消息通知和广播,如短信、邮件通知系统。

Kafka与RocketMQ的选型指南

1. 数据量与吞吐量:

高数据量、高吞吐量:选择Kafka,适合处理大规模数据流和高并发场景。
中等数据量、高可靠性:选择RocketMQ,适合需要高可靠性和顺序处理的场景。
2. 实时性与延迟:

高实时性、低延迟:选择Kafka,适合实时数据处理和低延迟应用。
严格顺序、事务支持:选择RocketMQ,适合需要严格顺序和分布式事务的应用。
3. 系统复杂性与管理:

高复杂性、专业管理:选择Kafka,需要专业团队进行部署和维护。
中等复杂性、灵活集成:选择RocketMQ,适合需要灵活集成和高可靠性的场景。
4. 持久化与可靠性:

高持久性、可靠性要求:选择Kafka,确保数据的持久化和高可用性。
高可靠性、顺序处理:选择RocketMQ,确保消息的高可靠性和顺序处理。

相关文章:

JMS和消息中间件:Kafka/RocketMQ

文章目录 消息传递模型使用JMS还是KafkaKafka与RocketMQ的优缺点Kafka与RocketMQ的使用场景Kafka与RocketMQ的选型指南 TPM 项目中, iflow之间使用了JMS,后端项目与数据库通信使用Kafka MQ和JMS的区别: JMS是 java 用来处理消息的一个API规范…...

【问题解决】ArcgisGP工具使用GIS模块自动发布图层报错:过渡失败

项目场景: 使用Arcpy脚本发布GP工具服务,该工具结果生成一个矢量文件,并且需要自动发布成在线图层,脚本中已经包含了自动发布图层的代码,本地在ArcgisPro中执行成功。现在需要将该工具发布成web工具。 问题描述 在…...

Yocto bitbake and codeSonar

1 mdm 1.1 屏蔽mdm sysvinit的console输出 - uboot传入参数的时候传入consolenull,这样Linux启动信息没有了 - 还需要在Linux配置中去掉Support for console on AMBA serial port - 文件系统/etc/inittab文件里注释掉::respawn:/sbin/getty -L ttyS000 115200 vt100…...

gpt-computer-assistant - 极简的 GPT-4o 客户端

更多AI开源软件: AI开源 - 小众AIhttps://www.aiinn.cn/sources gpt-computer-assistant是一个将 ChatGPT MacOS 应用程序提供给 Windows 和 Linux 的替代工作。因此,这是一个全新且稳定的项目。此时,您可以轻松地将其作为 Python 库安装&am…...

中国移动量子云平台:算力并网590量子比特!

在技术革新的浪潮中,量子计算以其独特的并行处理能力和指数级增长的计算潜力,有望成为未来技术范式变革和颠覆式创新应用的新源泉。中国移动作为通信行业的领军企业,致力于量子计算技术研究,推动量子计算产业的跨越式发展。 量子云…...

Vue 3 中的计算属性(Computed Properties)详解

目录 Vue 3 中的计算属性(Computed Properties)详解 引言 什么是计算属性? 创建和使用计算属性 示例 1:基本用法 示例 2:带有 getter 和 setter 的计算属性 计算属性 vs 方法 Vue 3 中的计算属性(Co…...

AWS S3 权限配置与文件上传下载指南

本文介绍如何配置 AWS S3 存储桶的访问权限,实现 EC2 实例上传文件和本地用户下载文件的功能。 权限配置 © ivwdcwso (ID: u012172506) 1. EC2 角色上传权限 创建 IAM 角色并附加以下策略,允许 EC2 实例上传文件到 S3: {"Version": "2012-10-17&qu…...

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文,工厂方法模式只能搞定单一产品族,遇到需要生产多个产品族时就歇菜了。于是,在需求的“花式鞭策”下,程序员们再次绷紧脑细胞,创造出了更强大的抽象工厂模式,让工厂一次性打包多个产品…...

CV(2)-插值和卷积

前言 仅记录学习过程,有问题欢迎讨论 看看年前可以学到哪。 频率: 灰度值变化程度的指标,是灰度再平面上的梯度幅值: 幅值: 是在一个周期内,交流电瞬时出现的最大绝对值,也是一个正弦波,波…...

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Texture 贴图 二、&#x1…...

fastadmin 后台插件制作方法

目录 一:开发流程 二:开发过程 (一):后台功能开发 (二):功能打包到插件目录 (三):打包插件 (四):安装插件…...

9. 一分钟读懂“策略模式”

9.1 模式介绍 策略模式是一种行为型设计模式,用于在运行时灵活切换对象的行为或算法,它将算法封装为独立的类,使得它们可以互相替换,而不会影响使用这些算法的客户端代码。 策略模式的核心思想是:定义一系列可互换的算…...

65页PDF | 企业IT信息化战略规划(限免下载)

一、前言 这份报告是企业IT信息化战略规划,报告详细阐述了企业在面对新兴技术成熟和行业竞争加剧的背景下,如何通过三个阶段的IT战略规划(IT 1.0基础建设、IT 2.0运营效率、IT 3.0持续发展),系统地构建IT管理架构、应…...

Android 单元测试断言校验方法 org.junit.Assert

判断布尔值 assertTrue assertFalse 判断对象非空 assertNull(object); 案例: PersistableBundle result Util.getCarrierConfig(mockContext, subId);assertNull(result); 判断是否相等 assertEquals("mocked_string", result.toString()); package or…...

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器(EC2),用于学习,遇到一个问题就是默认是用ec2-user用户登录,也需要密钥对。 既然是学习用的服务器,还是想直接用root登录,下面开始修改: 操作系统是&#xff1…...

用点云信息来进行监督目标检测

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述问题分析Making Lift-splat work well is hard深度不准确深度过拟合不准确的BEV语义 模型总体框架显性深度监督 深度细化模块演示效果核心…...

Navicat连接服务器MySQL

Navicat连接服务器MySQL 1. Navicat连接服务器MySQL2. 如何查看MySQL用户名和密码3. 修改MySQL登录密码4. 安装MySQL(Centos7)遇到错误和问题 1. error 1045 (28000): access denied for user ‘root’‘localhost’ (using password:yes) 1. Navicat连接服务器MySQL 选择数据…...

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码:管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码,涵盖了常见的 HTTP 状态码分类,如信息响应(1xx)、成功状态(2xx)、客户端错误&a…...

【人工智能数学基础篇】线性代数基础学习:深入解读矩阵及其运算

矩阵及其运算:人工智能入门数学基础的深入解读 引言 线性代数是人工智能(AI)和机器学习的数学基础,而矩阵作为其核心概念之一,承担着数据表示、变换和运算的重任。矩阵不仅在数据科学中广泛应用,更是神经网…...

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现,它继承了Nacos的所有核心功能,并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务,RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能,还支持单机和集…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...