[个人感悟] 消息队列应该考察哪些问题?

在这里插入图片描述


前言

消息队列. 不论是Java内部提供的LinkedBlockingQueue, 还是当下主流的中间件RabbitMQ, Kafka, RockMQ. 其本质上都是一个削峰填谷的工具.

我们都知道, 请求和流量都有可能瞬间很高, 或者很低. 所以, 很多时候, 我们需要请求存储起来, 或者使用异步的方式, 来匀速的处理过量的请求.


问题

问题-基础

  • 什么是消息队列? 消息队列有什么作用? 你常用的消息队列有哪些?

问题-特性问题

  • 如何保证消息队列消息不丢失?

  • 如何保证消息集群的高可用性?

  • 如何保证消息不重复消费? 如何保证消息的幂等性?

  • 如何实现延迟消息队列, 类似DelayQueue?

  • 消息存在失效时间?如何处理这部分类型的消息?

  • 如何保证消息的顺序性? 全局顺序性 or 局部顺序性?

问题-Kafka

  • 聊聊Kafka的基本架构?

  • Kafka 为何性能效率那么高?

问题-场景问题

  • 如何解决开发过程中等等消息积压问题?

  • 消息队列是否可以作为分布式事务的解决方案? 如何进行处理?


回答

问题-基础

  • 什么是消息队列? 消息队列有什么作用? 你常用的消息队列有哪些?
  1. 消息队列是一个队列. 主要用于削峰填谷. 缓解即时流量瞬发. 可以使整体请求处理匀速进行.(漏斗限流算法)
  2. 消息队列有JDK原生的Queue之外, 还有一些第三方消息队列框架. RabbitMQ RocketMQ Kafka.

问题-特性问题

  • 如何保证消息队列消息不丢失?

消息不丢失需要从, 发送端, 服务端, 消费端.

  1. 发送端. Kafka 消息发送有ISR. -1, 1, 2. 这3种模式. 要求限制高的消息需要设置为-1, 且需要设置重发策略.
  2. 服务端. 服务端Linux操作系统, 需要将内存数据落盘. 脏页. / RabbitMQ是内存的, 无法落盘.
  3. 消费端. 消息事务成功后, 在进行消息消费的提交操作. 不要AutoCommit, 需要手动Commit.
  • 如何保证消息集群的高可用性?
  1. 服务端.去中心化思想. 将一个Topic进行分片, 将其中心调度节点均匀分布多个节点.
  2. 消费端. 消费端-负载均衡.
  • 如何保证消息不重复消费? 如何保证消息的幂等性? 如何实现消息的精准一次消费?
    1.2.3点和前面消息不丢失一致. 幂等操作, 消息去重, 乐观锁 MVCC. (个人不是特别认可)

  • 如何实现延迟消息队列, 类似DelayQueue?

  1. RocketMQ 可以设置延时队列. 时间轮, 定时调度.
  • 消息存在失效时间?如何处理这部分类型的消息?
  1. RabbitMQ 死信队列.
  2. RocketMQ 延时队列. 设置延时检查和取消的检查的消息, 触发检查机制.
  • 如何保证消息的顺序性? 全局顺序性 or 局部顺序性?
  1. 全局顺序. 单节点. 数据不要分片, 使用一个分区.
  2. 局部顺序. 消息设置正确的发送路由算法, 消费设置正确的消费算法.

问题-Kafka

  • 聊聊Kafka的基本架构?
  1. Broker. Topic. Partition.
  2. Leader. Follower.
  3. Producer, Server, Consumer.
  4. 物理文件映射. index, log.
  • Kafka 为何性能效率那么高?
  1. mmap. 内存映射. 系统内存映射, 无需socket流相互转换. 内核和用户进行相互切换.
  2. Netty的select, epoll的网络IO交互模型.
  3. 顺序读写. 内存块预分配. 128M硬盘空间.

问题-场景问题

  • 如何解决开发过程中等等消息积压问题?
  1. 部门沟通. 先发现当前是上游, 下游, 自身问题. 消费加速时, 需要通知依赖部门, 防止其他服务宕机.
  2. 加速消费. Topic多分片, 或者新建Topic, 多分片. 起多个Consumer加速消费.
  • 消息队列是否可以作为分布式事务的解决方案? 如何进行处理?
  1. RocketMQ 在4.0版本实现了分布式事务的解决方案. 2PC模式.

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

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

相关文章

Qt QWizard新建向导实例

使用QWizard做新建向导,最简单的实例 class MyWizard : public QWizard { public: MyWizard(QWidget* parent nullptr); QWizardPage* createFirstPage(); QWizardPage* createSecondPage(); QWizardPage* createThirdPage(); }; MyWizard::MyWizard(QWidget* par…

python 10个自动化脚本

目录 🌟 引言 📚 理论基础 🛠️ 使用场景与代码示例 场景一:批量重命名文件 场景二:自动下载网页内容 场景三:数据清洗 场景四:定时执行任务 场景五:自动化邮件发送 场景六…

AI实时免费在线图片工具6:以图生相似图

1、以图生图,生成相似图 https://huggingface.co/spaces/diffusers/unofficial-SDXL-Turbo-i2i-t2i 间接实现:可以是图片先提取描述,再通过描述再去生成新图片 https://huggingface.co/spaces/gokaygokay/KolorsPlusPlus

徒手绘制 Android 通用进度条

拖动条&#xff08;FlexSeekBar&#xff09;&#xff0c;在Android的各个地方都非常常用&#xff0c;本文旨在自研一套通用的进度条&#xff0c;非常适合车载App使用 样式如下&#xff1a; 使用示例 <!--默认用法--> <com.max.android.ui.seekbar.FlexSeekBarandroi…

思路打开!腾讯造了10亿个角色,驱动数据合成!7B模型效果打爆了

世界由形形色色的角色构成&#xff0c;每个角色都拥有独特的知识、经验、兴趣、个性和职业&#xff0c;他们共同制造了丰富多元的知识与文化。 所谓术业有专攻&#xff0c;比如AI科学家专注于构建LLMs,医务工作者们共建庞大的医学知识库&#xff0c;数学家们则偏爱数学公式与定…

Unity 实现UGUI 简单拖拽吸附

获取鼠标当前点击的UI if(RectTransformUtility.RectangleContainsScreenPoint(rectTransform, Input.mousePosition)) {return rectTransform.gameObject; } 拖拽 在Update 中根据鼠标位置实时更新拖拽的图片位置。 itemDrag.transform.position Input.mousePosition; …

《安全行业大模型技术应用态势发展报告(2024)》

人工智能技术快速迭代发展&#xff0c;大模型应用场景不断拓展&#xff0c;随着安全行业对人工智能技术的应用程度日益加深&#xff0c;大模型在网络安全领域的应用潜力和挑战逐渐显现。安全行业大模型技术的应用实践不断涌现&#xff0c;其在威胁检测、风险评估和安全运营等方…

秋招突击——7/5——复习{}——新作{跳跃游戏II、划分字母区间、数组中的第K个大的元素(模板题,重要)、前K个高频元素}

文章目录 引言正文贪心——45 跳跃游戏II个人实现参考实现 划分字母区间个人实现参考实现 数组中的第K个最大元素个人实现参考做法 前K个高频元素个人实现参考实现 总结 引言 今天就开始的蛮早的&#xff0c;现在是九点多&#xff0c;刚好开始做算法&#xff0c;今天有希望能够…

方圆资源网,方圆资源官网

在当今这个信息化高速发展的时代&#xff0c;方圆资源网络已成为推动社会进步、促进经济发展的重要力量。方圆资源网不仅汇聚了海量的信息资源&#xff0c;更为我们提供了一个高效、便捷的信息交流平台。本文旨在详细介绍资源网的概念、特点、功能以及其在现代社会中的重要意义…

理解算法复杂度:空间复杂度详解

引言 在计算机科学中&#xff0c;算法复杂度是衡量算法效率的重要指标。时间复杂度和空间复杂度是算法复杂度的两个主要方面。在这篇博客中&#xff0c;我们将深入探讨空间复杂度&#xff0c;了解其定义、常见类型以及如何进行分析。空间复杂度是衡量算法在执行过程中所需内存…

【python爬虫实战】进阶天气虫虫(过程复盘 心得分享)

程序设计过程里的一些心得&#xff1a; 0. 规模较大的程序&#xff0c;往往都是以更小的功能块搭建起来的。如此&#xff0c;为了提升总体程序的构建效率&#xff0c; 笔者发现分“两步走”会比较高效&#xff1a; A. 遇到需要反复调试的功能块&#xff0c;可先在另一程序中逐…

植物大战僵尸融合嫁接版 MAC 版本下载安装详细教程

继植物大战僵尸杂交版火了之后&#xff0c;PVZ改版可谓是百花齐放&#xff0c;最近又有一个非常好玩的模式被开发出来了&#xff0c;他们称为《植物大战僵尸融合嫁接版》 该版本并没有对植物卡牌做改动&#xff0c;而是可以将任意两种植物叠放到一起进行融合&#xff0c;产生新…

玲珑大爆料!deepin Meetup(上海站)议程抢先看!

Linux软件生态正迎来一场革命&#xff0c;随着软件数量的激增&#xff0c;传统的包管理系统逐渐暴露出依赖性强、兼容性差、安全性不足等问题。“玲珑”是一种新型的独立包管理工具集&#xff0c;通过先进的隔离技术和分层管理&#xff0c;为应用提供了一个安全、稳定、高效的运…

202488读书笔记|《365日创意文案》——无聊的 到底是这世间, 还是自己?懂得忘却的人才能前进

202488读书笔记|《365日创意文案》——无聊的 到底是这世间&#xff0c; 还是自己&#xff1f;懂得忘却的人才能前进 1月2月3月4月5月6月7月8月9月10月11月12月 《365日创意文案》WRITES PUBLISHING&#xff0c;一些日常&#xff0c;是烟火&#xff0c;也是幸福的印记。 当下也…

IT之家最新科技热点 | 小米 AI 研究院开创多模态通用模型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Python编程学习笔记(1)--- 变量和简单数据类型

1、变量 在学习编程语言之前&#xff0c;所接触的第一个程序&#xff0c;绝大多数都是&#xff1a; print("Hello world!") 接下来尝试使用一个变量。在代码中的开头添加一行代码&#xff0c;并对第二行代码进行修改&#xff0c;如下&#xff1a; message "…

3 个令人惊艳的 AI 开源工具,诞生了!

大家好&#xff0c;今天继续聊聊 AI 科技圈发生的那些事。分享几个最新好玩、实用的AI工具。更多最新技术&#xff0c;文末加入我们。 LivePortrait LivePortrait&#xff1a;一款可以轻松让一幅肖像栩栩如生的工具 它可以精准操控眼睛和嘴唇动作&#xff1a; 让静态照片变为…

python特征相关性可视化分析 - sns.pairplot

seaborn 是一个基于 matplotlib 的 Python 数据可视化库&#xff0c;提供了更高层次的接口来绘制有吸引力的统计图形。pairplot 是 seaborn 中的一个函数&#xff0c;用于绘制数据集中多个变量之间的成对关系图。 基本用法 pairplot 函数可以快速地对数据集中的所有数值变量进…

【AutoencoderKL】基于stable-diffusion-v1.4的vae对图像重构

模型地址&#xff1a;https://huggingface.co/CompVis/stable-diffusion-v1-4/tree/main/vae 主要参考:Using-Stable-Diffusion-VAE-to-encode-satellite-images sd1.4 vae 下载到本地 from diffusers import AutoencoderKL from PIL import Image import torch import to…