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,确保消息的高可靠性和顺序处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出:Go语言中map的工作原理详解

目录 map 的简介哈希表的基础概念Go 中 map 的内部结构创建和使用 mapmap 的扩容机制处理冲突的方法map 的并发安全map 性能优化策略实际应用案例常见问题解答参考资料 深入浅出:Go 语言中 map 的工作原理与性能优化 map 的简介 在 Go 语言中,map 是…

泷羽sec专题课笔记-- Linux作业--开机自启动方法以及破解

本笔记为 泷羽sec 《红队全栈课程》学习笔记,课程请可自行前往B站学习,课程/笔记主要涉及网络安全相关知识、系统以及工具的介绍等,请使用该课程、本笔记以及课程和笔记中提及工具的读者,遵守网络安全相关法律法规,切勿…

Linux内核早期打印机制与RS485通信技术

往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍深入理解TTY体系:设备节点与驱动程序框架详解Linux串口应用编程:从UART到GPS模块及字符设备驱动 解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

如何利用内链策略提升网站的整体权重?

内链是谷歌SEO中常常被低估的部分,实际上,合理的内链策略不仅能帮助提升页面间的关联性,还可以增强网站的整体权重。通过正确的内链布局,用户可以更流畅地浏览你的网站,谷歌爬虫也能更快地抓取到更多页面,有…

工业—使用Flink处理Kafka中的数据_ChangeRecord2

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,每隔 1 分钟输出最近 3 分钟的预警次数最多的 设备,将结果存入Redis 中, key 值为 “warning_last3min_everymin_out” , value 值为 “ 窗口结束时间,设备id” &am…

力扣第90题:带重复元素的子集

力扣第90题:带重复元素的子集 问题描述 给定一个整数数组nums,该数组可能包含重复元素。返回该数组所有可能的子集(幂集),并且子集中的元素需要去重。返回的子集中的每个元素应按照非递减顺序排列。 例如&#xff0…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg封装

封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…

LVS默认的工作模式支持哪些负载均衡算法?

LVS默认的工作模式支持哪些负载均衡算法? LVS(Linux Virtual Server)默认支持多种负载均衡算法,这些算法在不同的场景下具有各自的优势。以下是 LVS 默认支持的负载均衡算法及其特点: 1. 轮询调度(Round Robin Sched…

汇编语言学习-二

好吧,已经隔了两天,下完班看了两天,在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统; 这个第二天应该是称为第二章更为合适,目前第二章已经看完,基本的命令也是敲了敲; 下面就进行一…

等差数列末项计算

等差数列末项计算 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给出一个等差数列的前两项a1,a2,求第n项是多少。 输入 一行,包含三个整数a1,a2&#x…

【笔记2-1】ESP32:基于vscode的espidf插件的开发环境搭建

主要参考b站宸芯IOT老师的视频,记录自己的笔记,老师讲的主要是linux环境,但配置过程实在太多问题,就直接用windows环境了,老师也有讲一些windows的操作,只要代码会写,操作都还好,开发…

Redis设计与实现第17章 -- 集群 总结2(执行命令 重新分片)

17.3 在集群中执行命令 接收命令的节点会计算出命令要处理的数据库键属于哪个槽,并检查这个槽是否指派给了自己: 如果是的话,直接执行这个命令 否则,节点向客户端返回一个MOVED错误,指引客户端转向redirect至正确的节…

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

如何在GitHub上Clone项目:一步步指南

GitHub作为全球最大的代码托管平台,汇聚了无数开发者的智慧结晶。对于初学者和资深开发者来说,学会如何从GitHub上克隆(Clone)项目是一项基本且重要的技能。本文将详细介绍如何在GitHub上克隆项目的步骤,帮助你轻松将他…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…

脚本数据库操作 -- 查表、增加字段、备忘录

一、查询数据库中所有表 在MySQL中,您可以使用INFORMATION_SCHEMA数据库来查询数据库中所有表的列表。INFORMATION_SCHEMA是一个特殊的数据库,它包含了关于其他所有数据库的元数据。 以下是查询当前数据库中所有表的SQL语句: SELECT TABLE…

H3C OSPF实验

实验拓扑 实验需求 按照图示配置 IP 地址按照图示分区域配置 OSPF ,实现全网互通为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 实验解法 一、配置IP地址 [R1]int l0 [R1-LoopBack0]ip add 1.1.1.1 32 […

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式:私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型(Matlab&#…

flutter 报错 error: unable to find git in your path.

项目issue:WIndows: "Unable to find git in your PATH." if terminal is not in admin mode Issue #123995 flutter/flutter 解决办法, 方法一:每次想要运行flutter的时候以管理员方式运行,比如以管理方式运行vsco…