当前位置: 首页 > 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管理控制台的功能,还支持单机和集…...

JAVA |日常开发中JSTL标签库详解

JAVA &#xff5c;日常开发中JSTL标签库详解 前言一、JSTL 概述1.1 定义1.2 优势 二、JSTL 核心标签库2.1 导入 JSTL 库2.2 <c:out>标签 - 输出数据2.3 <c:if>标签 - 条件判断2.4 <c:choose>、<c:when>和<c:otherwise>标签 - 多条件选择 结束语优…...

Apache HttpClient 4和5访问没有有效证书的HTTPS

本文将展示如何配置Apache HttpClient 4和5以支持“接受所有”SSL。 目标很简单——访问没有有效证书的HTTPS URL。 SSLPeerUnverifiedException 在未配置SSL的情况下&#xff0c;尝试消费一个HTTPS URL时会遇到以下测试失败&#xff1a; Test void whenHttpsUrlIsConsumed…...

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…...

扫二维码进小程序的指定页面

草料二维码解码器 微信开发者工具 获取二维码解码的参数->是否登陆->跳转 options.q onLoad: function (options) {// console.log("options",options.q)if (options && options.q) {// 解码二维码携带的链接信息let qrUrl decodeURIComponent(optio…...

如何用IntelliJ IDEA开发Android Studio用自定义Gradle插件

博主所用软件版本为&#xff1a; IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件&#xff08;IntelliJ IDEA 2024.1.4&#xff09; 新建groovy工程&#xff0c;File–>New–>Project… 右键点…...

YOLOv8实战道路裂缝缺陷识别

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对道路裂缝数据集进行训练和优化&#xff0c;该数据集包含丰富的道路裂缝图像样本…...

RPC一分钟

概述 微服务治理&#xff1a;Springcloud、Dubbo服务通信&#xff1a;Grpc、Trift Dubbo 参考 Dubbo核心功能&#xff0c;主要提供了&#xff1a;远程方法调用、智能容错和负载均衡、提供服务自动注册、自动发现等高效服务治理功能。 Dubbo协议Dubbo支持dubbo、rmi、http、…...

Elasticsearch ILM 故障排除:常见问题及修复

作者&#xff1a;来自 Elastic Stef Nestor 大家好&#xff01;我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时&#xff0c;我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮…...

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了一系列算法&#xff0c;并将每种算法封装到独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化&#xff0c;客户端通过与这些策略对象进…...

【Maven系列】深入解析 Maven 常用命令

前言 在当今的软件开发过程中&#xff0c;项目管理是至关重要的一环。项目管理包括了项目构建、依赖管理以及发布部署等诸多方面。而在Java生态系统中&#xff0c;Maven已经成为了最受欢迎的项目管理工具之一。Maven 是一套用于构建、依赖管理和项目管理的工具&#xff0c;主要…...