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

在这里插入图片描述


前言

消息队列. 不论是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.mzph.cn/news/868448.shtml

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

相关文章

Go compress包

compress 包是 Go 标准库中的一个重要包,提供了对常见压缩格式(如 gzip、zlib、bzip2 和 lzw)的支持。这个包主要用于处理压缩和解压缩数据流。 compress 包的结构 compress 包包含以下子包: compress/gzip: 提供了对 gzip 格式的…

动态规划算法-以中学排课管理系统为例

1.动态规划算法介绍 1.算法思路 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若…

爬虫:Sentry-Span参数逆向

在抓某眼查数据太过频繁时会出现极验的验证码。极验的教程有很多,主要是发现在这里获取验证码的时候需要携带参数Sentry-Span。在这里记录一下逆向的主要过程,直接上补环境的代码。 window global; location {}; my_log console.log;(function () {l…

windows 11 + kali wsl二合一配置步骤与踩坑

windows 11 kali wsl二合一配置步骤与踩坑 在前几天的某市攻防演练中,在攻防前期,我的虚拟机经常无缘无故出现断网、卡顿等现象,但找不出原因。 为了不影响后续的这些天的攻防演练,我选择在一个晚上通宵 在我的windows 11系统上…

白骑士的C语言教学实战项目篇 4.4 简单HTTP服务器

在本项目中,我们将设计并实现一个简单的HTTP服务器,涵盖网络编程基础、HTTP协议解析、多线程处理请求。通过这个项目,我们可以更加深入地了解网络编程、HTTP协议以及多线程编程的基本概念和实现方法。 网络编程基础 网络编程是计算机科学中的…

2024年电脑监控软件排行榜(真实测评推荐七款电脑监控软件)

在信息化快速发展的今天,企业对员工电脑活动的监控变得尤为重要。有效的电脑监控软件不仅可以提升员工的工作效率,还能防止信息泄露,保障企业的数据安全。本文将介绍几款知名的电脑监控软件,并对其特点进行详细分析,帮…

java中函数式接口一般什么时候使用,并写一下详细的代码实例

在Java中,函数式接口(Functional Interface)主要用于支持Lambda表达式和方法引用,从而简化代码、提高可读性和可维护性。函数式接口是指仅包含一个抽象方法的接口,这样的接口可以通过Lambda表达式来实例化,…

DMException: 变量空间溢出,解决达梦数据库报错问题

达梦报错 Caused by: dm.jdbc.driver.DMException: 变量空间溢出 at dm.jdbc.driver.DBError.throwException(SourceFile:715) ~[DmJdbcDriver18.jar:- 8.1.3.100 - Production] at dm.jdbc.a.a.y.l(SourceFile:619) ~[DmJdbcDriver18.jar:- 8.1.3.100 - Production] …

笔记本电脑投屏怎么操作?一看就会!

日常工作或办公都会用到笔记本电脑,但很多新手用户不知道笔记本电脑的投屏要怎么操作?接下来系统之家给大家介绍三种简单的操作方法,帮助大家轻松完成笔记本电脑投屏投屏操作,从而满足自己的办公或学习使用需求。 方法一 1. 直接W…

Django QuerySet对象,exclude()方法

模型参考上一章内容: Django QuerySet对象,filter()方法-CSDN博客 exclude()方法,用于排除符合条件的数据。 1,添加视图函数 Test/app11/views.py from django.shortcuts import render from .models import Postdef index(re…

Eclipse运行main函数报 launch error

右键run as java application,运行main函数的时候报launch error 解决方式:文件右键run configurations 旧的是Project JRE,改成下图这个样子

python(opencv2、PIL)将图片透明背景转换成白色背景的两种方法

方法一:使用OpenCV的函数封装 pip install opencv-pythonimport cv2 import numpy as npdef convert_transparent_to_white_opencv(input_image_path, output_image_path):"""将透明背景的图片转换为白色背景,使用OpenCV实现。参数&…

服务器的分类有哪些

1、根据体系结构不同,服务器可以分成两大重要的类别:IA架构服务器和RISC架构服务器。   这种分类标准得主要依据是两种服务器采用得处理器体系结构不同。RISC架构服务器采用得CPU是所谓的精简指令集的处理器,精简指令集CPU的主要特点是采用…

Windows7彻底卸载mysql

1.控制面板卸载mysql 2.删除C:\Program Files\MySQL 3.删除C:\用户\Administrator\App Data\Roaming\MySQL”(App Data默认隐藏,需要在文件夹和搜索选项中勾选显示文件夹),为了删除的更彻底,可以直接在计算机全盘搜索MySQL关键字,将所有找到…

华为机试HJ53杨辉三角的变形

华为机试HJ53杨辉三角的变形 题目: 求杨辉三角中第n行第一个偶数出现的位置。 想法: 杨辉三角中存在规律,除了第一行与第二行没有偶数外,从第三行开始第一个偶数出现的位置以(2,3,2&#xf…

mamba如何解决version `GLIBCXX_3.4.29‘ not found的问题

参考 如何解决version GLIBCXX_3.4.29‘ not found的问题_glibcxx not found-CSDN博客 用mamba时,出现报错 ImportError: /lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29 not found 解决 #查找系统中的许多libstdc.so.6 sudo find / -name libstd…

软件测试下的AI之路(5)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。 💎声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问题欢迎大家…

实现不同的数据库之间的同步方式

第一种 实时同步 针对实时性要求比较高的场景可以使用canal中间件实现,我们内部的大数据项目中也有用dataX的。 canal 的主要用途是基于mysql数据库增量日志解析,并能提供新增量数据订阅和消费,从而实现数据同步。其主要是基于mysql 的binlo…

多数据库支持在PHP框架中的实现策略与实践

在现代Web开发中,随着应用规模的扩大和业务需求的多样化,单一数据库往往难以满足所有需求。多数据库支持,即在一个应用程序中使用多个数据库系统,已经成为许多项目的标准配置。本文将详细介绍如何在PHP框架中实现多数据库支持&…

QT中常用英语单词

Qt (.n): 一个跨平台的C应用程序开发框架,广泛用于开发GUI应用程序。Widget (.n): 在Qt中,一个widget指的是一个可视化的用户界面元素,如按钮、文本框等。Signal and Slot (.n): Qt特有的通信机制。Signal是某个特定事件发生时发出的信号&…