RocketMQ 知识速览

文章目录

    • 一、消息队列对比
    • 二、RocketMQ 基础
      • 1. 消息模型
      • 2. 技术架构
      • 3. 消息类型
      • 4. 消费者类型
      • 5. 消费者分组和生产者分组
    • 三、RocketMQ 高级
      • 1. 如何解决顺序消费和重复消费
      • 2. 如何实现分布式事务
      • 3. 如何解决消息堆积问题
      • 4. 如何保证高性能读写
      • 5. 刷盘机制 (topic 模型)
      • 6. 存储机制(topic 模型)

一、消息队列对比

对比方向概要
吞吐量万级的 ActiveMQ 和 RabbitMQ 的吞吐量(ActiveMQ 的性能最差)要比十万级甚至是百万级的 RocketMQ 和 Kafka 低一个数量级。
时效性RabbitMQ 基于 Erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级,其他几个都是 ms 级。
可用性都可以实现高可用。ActiveMQ 和 RabbitMQ 都是基于主从架构实现高可用性。
可靠性ActiveMQ 和 RabbitMQ 丢失的可能性非常低, Kafka、RocketMQ 和 Pulsar 理论上可以做到 0 丢失。
可扩展性Kafka、RabbitMQ 具有良好的可扩展性,可以通过添加更多的节点来提高容量和性能。RocketMQ 支持水平和垂直扩展,但是节点的数量有一定限制。
顺序消息Kafka 同一分区内保证顺序性、RocketMQ 原生支持顺序消息队列,RabbitMQ 需要使用单个队列实现
其他持久化、延迟队列、死信队列、消息回溯、消息确认、消息TTL、消费模式

Ref: https://cloud.tencent.com/developer/article/1944357

二、RocketMQ 基础

1. 消息模型

  • 队列模型
    在这里插入图片描述

局限:无法广播

  • 主题模型 / 发布订阅模型
    在这里插入图片描述
  • Producer GroupTopicConsumer Group

2. 技术架构

在这里插入图片描述

3. 消息类型

  • 普通消息
    • 生命周期:初始化>待消费>消费中>消费提交>消息删除)
  • 定时消息(延时 & 定时)
    • 生命周期:初始化>定时中>待消费>消费中>消费提交>消息删除
  • 顺序消息
  • 事务消息

4. 消费者类型

  • PushConsumer
    • 哪些错误使用方式会导致无法保证消息的可靠性(核心: 必须消费成功再返回)
  • SimpleConsumer
    • 是一种接口原子型的消费者类型,消息的获取、消费状态提交以及消费重试都是通过消费者业务逻辑主动发起调用完成
  • PullConsumer

5. 消费者分组和生产者分组

  • 生产者分组是匿名的;
  • 消费者分组是多个消费行为一致的消费者的负载均衡分组,可以实现水平扩展以及高可用容灾。

三、RocketMQ 高级

1. 如何解决顺序消费和重复消费

顺序消费

  • 只有队列模型支持
  • 普通顺序(异常情况下可能乱序,比如 broker 重启)和严格顺序(binlog 同步场景)
  • 多队列时需要使用队列选择算法(轮询算法 - 绑定topic & 默认,最小投递延迟 - 会导致消息分布不均匀,继承MessageQueueSelector实现hash)保证同一类数据始终路由到同一队列

重复消费

  • 实现幂等

2. 如何实现分布式事务

比较常见的分布式事务实现有 2PC、TCC 和事务消息(half 半消息机制);
RocketMQ 使用 事务消息 + 事务反查机制
在这里插入图片描述

以上步骤 都是在生产者监听器实现类中实现的,

  • 对应接口:RocketMQLocalTransactionListener,
  • 接口方法:
    • executeLocalTransaction - 事务执行方法
    • checkLocalTransaction - 事务回查方法

事务消息是生产者通过 rocketMQTemplate.sendMessageInTransaction 方法发送的

3. 如何解决消息堆积问题

消息堆积的根源:生产者生产太快 或 消费者消费太慢

  • 生产者生产太快:限流降级
  • 消费者消费太慢:检查是否有大量消费失败,排查资源死锁
  • 通用方案:增加消费者实例数量和每个主题的队列数量

4. 如何保证高性能读写

  • 零拷贝技术 vs. 传统 IO(read/write)
    mmap(4次上下文切换+3次IO,优点是用户可以感知和修改数据内容,RocketMQ 主要使用的方法) 和 sendfile(2次上下文切换+3次IO)

5. 刷盘机制 (topic 模型)

同步刷盘 & 异步刷盘

  • 保证可靠性

同步复制 & 异步复制

  • 保证可用性,不影响可靠性,因为主从复制的主节点挂掉后生产者不会再向该队列发送,也不会自动切换主从

6. 存储机制(topic 模型)

RocketMQ 消息存储架构中的三大角色——CommitLog、ConsumeQueue 和 IndexFile

  • CommitLog:消息主体以及元数据的存储主体,用于顺序写入日志文件
  • ConsumeQueue:消息消费队列,引入的目的主要是提高消息消费的性能,ConsumeQueue(逻辑消费队列)作为消费消息的索引,保存了指定 Topic 下的队列消息在 CommitLog 中的起始物理偏移量 offset,消息大小 size 和消息 Tag 的 HashCode 值。Consumequeue 文件可以看成是基于 topic 的 Commitlog 索引文件
  • IndexFile:IndexFile(索引文件)提供了一种可以通过 key 或时间区间来查询消息的方法

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

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

相关文章

2_CSS3 背景 --[CSS3 进阶之路]

CSS3 中的背景属性提供了许多强大的功能来增强网页设计,包括但不限于多背景图像、渐变、背景大小控制等。以下是一些关键的 CSS3 背景属性及其用法示例。 1. 多重背景图像 CSS3 允许你为一个元素设置多个背景图像。这些图像按照它们在 background-image 属性中定义…

Kutools for Excel 简体中文版 - 官方正版授权

Kutools for Excel 是一款超棒的 Excel 插件,就像给你的 Excel 加了个超能助手。它有 300 多种实用功能,现在还有 AI 帮忙,能把复杂的任务变简单,重复的事儿也能自动搞定,不管是新手还是老手都能用得顺手。有了它&…

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛,旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程,体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

Spring Data Elasticsearch简介

一、Spring Data Elasticsearch简介 1 SpringData ElasticSearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。 Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通…

STM32之LWIP网络通讯设计-下(十五)

STM32F407 系列文章 - ETH-LWIP(十五) 目录 前言 一、软件设计 二、CubeMX实现 1.配置前准备 2.CubeMX配置 1.ETH模块配置 2.时钟模块配置 3.中断模块配置 4.RCC及SYS配置 5.LWIP模块配置 3.生成代码 1.main文件 2.用户层源文件 3.用户层头…

AI浪潮下的IT变革之路:机遇、挑战与重塑未来

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 AI浪…

Edge浏览器网页设置深色模式/暗模式

文章目录 需求分析1. 浏览器中的设置——外观——深色。2. 在Edge浏览器的地址栏如下网址:edge://flags/,直接搜索Dark则有内容弹出,将Default更改为Enable即可设置成功。3. 成果 需求 长期对着电脑屏幕,白色实在太刺眼&#xff…

Type-C双屏显示器方案

在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么? 阻塞队列的特点是什么? Lua脚本在这里的作用是什么? 异步调用创建订单的具体逻辑是什么? 为什么要用代理对象proxy调用createVoucherOrder方法? 对于代码的详细…

机器学习基础-机器学习的常用学习方法

目录 半监督学习的概念 规则学习的概念 基本概念 机器学习里的规则 逻辑规则 规则集 充分性与必要性 冲突消解 命题逻辑 → 命题规则 序贯覆盖 单条规则学习 剪枝优化 强化学习的概念 1. 强化学习对应了四元组 2. 强化学习的目标 强化学习常用马尔可夫决策过程…

国产3D CAD将逐步取代国外软件

在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …

【机器学习】农业 4.0 背后的智慧引擎:机器学习助力精准农事决策

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在当今数字化浪潮汹涌澎湃之际,农业领域正经历着一场前所未有的深刻变革,大踏步迈向农业 4.0时代。这一时代…

使用Docker模拟PX4固件的无人机用于辅助地面站开发

前言 最近在制作鸿蒙无人机地面站,模仿的是QGroundControl,协议使用mavlink,记录一下本地模拟mavlink协议通过tcp/udp发送 废话不多说直接上命令 1.启动docker的桌面端 启动之后才能使用docker命令来创建容器 docker run --rm -it jonas…

C#调用OpenCvSharp实现图像的开运算和闭运算

对图像同时进行腐蚀和膨胀操作,顺序不同则效果也不同。先腐蚀后膨胀为开运算,能够消除小斑点和细小的突出物、平滑图像以及改善边缘;先膨胀后腐蚀为闭运算,能够去除噪点、填补图像孔洞、连接邻近物体和平滑物体边界。   OpenCvS…

整数和浮点数的存储

整数的存储 整数的存储分为有符号和无符号的整数的存储,整数2进制的表示方法有三种,分别是原码、反码、补码,内存中存储的是补码,反码可以理解为是一个中转站,原码就是直接将数值按照正负形式翻译成的二进制数字 有符…

<论文>时序大模型如何应用于金融领域?

一、摘要 本文介绍2024年的论文《Financial Fine-tuning a Large Time Series Model》,论文探索了主流的时间序列大模型在金融领域的微调应用实践,为时序大模型的领域微调提供了参考。 译文: 大型模型在自然语言处理、图像生成以及近期的时间…

【Linux】深入理解文件系统(超详细)

目录 一.磁盘 1-1 磁盘、服务器、机柜、机房 📌补充: 📌通常网络中用高低电平,磁盘中用磁化方向来表示。以下是具体说明: 📌如果有一块磁盘要进行销毁该怎么办? 1-2 磁盘存储结构 ​编辑…

UML系列之Rational Rose笔记七:状态图

一、新建状态图 依旧是新建statechart diagram; 二、工作台介绍 接着就是一个状态的开始:开始黑点依旧可以从左边进行拖动放置: 这就是状态的开始,和活动图泳道图是一样的;只能有一个开始,但是可以有多个…

快速上手 INFINI Console 的 TopN 指标功能

背景 在分布式搜索引擎系统(如 Easysearch、Elasticsearch 和 OpenSearch)中,性能监控至关重要。为了确保系统的高效运行和资源的合理分配,我们通常需要关注一段时间内关键资源的使用情况,特别是索引、节点和分片的内…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用,凭借uniapp 可以在h5 小程序 app…