优缺点

消息队列的优点:

  1. 实现系统解耦:

:::color5
系统解耦解释

有 MQ 时是 “服务 A 发消息到队列,其他服务从队列拿消息新增服务接队列就行”;无 MQ 时是 “服务 A 直接调其他服务的接口 / 依赖,新增 / 变更服务时 A 得改代码适配”(有 MQ 时服务间依赖弱,无 MQ 时依赖强、改动影响大)。

有mq:

没有mq:

:::

  1. 实现异步调用

:::color5
异步调用解释

有 MQ 的情况 服务 A 不需要等待服务 B、C、D 处理完任务才继续自己的工作。服务 A 只需把要处理的任务(消息)发送到 MQ 中,然后就可以立即去做其他事情了。而服务 B、C、D 会各自从 MQ 里获取任务,然后在后台异步地去处理这些任务,彼此之间互不干扰,实现了任务的异步执行。

没有 MQ 的情况 服务 A 调用服务 B、C、D 时,必须等待服务 B、C、D 把当前的任务处理完成,得到返回结果后,服务 A 才能继续进行后续的操作,整个过程是同步的,会造成服务 A 等待时间长,资源利用效率低。

与线程的区别:

  1. 适用范围:MQ 适用于跨服务 / 分布式场景,线程适用于单进程内部
  2. 耦合程度:MQ 实现服务解耦,线程间通常存在较强耦合

【因为mq生产者只需要关心消息发送,消费者只需要关心接受,耦合度不高,而线程通常在一个程序内部,共享内存等,如果一个线程的逻辑或接口发生变化,会影响到其他协作的进程】

  1. 可靠性:MQ 自带消息持久化,线程需额外处理数据安全
  2. 扩展性:MQ 可轻松横向扩展消费者,线程数量受系统资源限制

:::

  1. 流量削峰

缺点:

  1. 系统可用性降低【如果mq宕机了,那么服务就都宕机了】
  2. 提升系统的复杂度【中间件越多,系统越复杂】
  3. 数据一致性问题【与原生的相比,需要处理数据一致性问题】

消息队列的分类与选择

  • Kafka:分布式消息系统,性能高、支持多语言,分布式架构有副本机制,可靠性高,适合日志等场景,但队列 / 分区过多时负载和响应时间受影响,实时性依赖轮询间隔,消费失败不支持重试且社区更新慢。
  • RocketMQ:阿里开源,Java 实现,消息可靠性好,单机支持大量持久化队列,性能优、支持多种消费模式,分布式扩展好且版本更新快,但客户端语言支持少,社区成熟度及关注度不及 Kafka,无 Web 管理界面且未在核心实现 JMS 接口。
  • RabbitMQ:基于 AMQP 协议,性能好、支持高并发,健壮稳定、跨平台且支持多语言,有消息确认和持久化机制,路由高度可定制,管理界面丰富、社区活跃,但代理架构导致运行速度慢、消息封装大,学习和维护成本高。
  • ActiveMQ:Apache 出品,支持 JMS 规范和多语言,可通过 JDBC 持久化到数据库,有自动重连、错误重试和安全机制,监控完善、界面友好,但社区活跃度不如 RabbitMQ,存在消息丢失问题,对上千队列的场景不适用且对旧版本维护少。
  • ZeroMQ:类似 Socket 接口的传输层库,非传统消息队列服务器,可实现 N:M 通信,屏蔽 Socket 编程细节,让网络编程更简单,支持多种通信模型,目标是成为标准网络协议栈部分,但更偏向底层网络通讯库。

KafKa

基本介绍

安装and运行

安装Zookeeper

:::color5
ZooKeeper 是一个分布式协调服务

  • 元数据管理:Kafka 依赖 ZooKeeper 存储和管理集群的元数据信息,包括 Topic 的创建、删除,分区的分配情况,Broker 的注册信息等。比如当创建一个新的 Topic 时,Kafka 会将相关的 Topic 元数据存储在 ZooKeeper 中。
  • Broker 协调:ZooKeeper 负责监控 Kafka 集群中 Broker 的状态。当有 Broker 加入或离开集群时,ZooKeeper 会感知到变化,并通知其他相关组件。同时,在选举分区的 Leader 副本时,也需要借助 ZooKeeper 来保证选举的一致性和正确性,确保数据的读写操作能够正常进行。
  • 消费者组管理:对于 Kafka 的消费者组,ZooKeeper 记录了消费者组的成员信息、消费偏移量(Offset)等。当消费者组内成员发生变化(如新增消费者或消费者下线)时,ZooKeeper 会协助进行 Rebalance 操作,重新分配分区的消费任务,保证消费的均衡和高效。

:::

(kafka中也有自带的zookeeper,但这里也可以自己装一个)

KafKa配置介绍

安装and配置EFAK

:::color5
EFAK(Kafka Eagle)是一款开源的 Kafka 监控和管理工具,用于帮助用户更好地管理和监控 Kafka 集群,具体作用如下:

  • 集群管理:可以同时管理多个 Kafka 集群,在配置文件(如<font style="color:rgb(0, 0, 0);">system - config.properties</font>)中通过设置<font style="color:rgb(0, 0, 0);">efak.zk.cluster.alias</font>来为不同的 Kafka 集群设置别名,指定每个集群对应的 ZooKeeper 连接地址(如<font style="color:rgb(0, 0, 0);">cluster1.zk.list=localhost:2181</font> ),方便用户对不同集群进行区分和操作。
  • 监控功能:实时监控 Kafka 集群的各项指标,比如 Broker 的状态、Topic 的消息堆积情况、消费者组的消费延迟等。通过直观的界面展示这些指标,让运维人员和开发者能够快速了解集群的运行状况,及时发现潜在问题。
  • 数据统计分析:提供对 Kafka 消息数据的统计和分析功能,例如统计某个 Topic 在一段时间内的消息生产和消费速率、消息总量等,帮助用户更好地理解业务数据的流动情况,为性能优化和容量规划提供依据。
  • 数据存储配置:支持配置不同的数据库来存储监控数据,默认支持 SQLite,也可以配置 MySQL(通过修改<font style="color:rgb(0, 0, 0);">efak.driver</font><font style="color:rgb(0, 0, 0);">efak.url</font><font style="color:rgb(0, 0, 0);">efak.username</font><font style="color:rgb(0, 0, 0);">efak.password</font>等参数 ),满足不同用户对于数据存储的需求。

:::

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

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

相关文章

实践《数字图像处理》之Canny边缘检测、霍夫变换与主动二值化处理在短线段清除应用中的实践

在最近的图像处理项目中&#xff0c;其中一个环节&#xff1a;图片中大量短线&#xff08;不是噪声&#xff09;&#xff0c;需要在下一步处理前进行清除。在确定具体实现时&#xff0c;碰到了Canny边缘检测、霍夫变换与主动二值化处理的辩证使用&#xff0c;相关逻辑从图片灰度…

vue3与ue5通信-工具类

工具 ue5-simple.js /*** UE5 通信工具* 两个核心方法&#xff1a;发送消息和接收消息*/// 确保全局对象存在 if (typeof window ! undefined) {window.ue window.ue || {};window.ue.interface window.ue.interface || {}; }/*** 生成 UUID*/ function generateUUID() {retu…

在kotlin中如何使用像java中的static

在 Kotlin 中&#xff0c;没有直接的 static 关键字&#xff0c;但有几种等效的方式来实现 Java 中静态成员的功能&#xff1a; 1. 伴生对象 (Companion Object) - 最常用 class MyClass {companion object {// 静态常量const val STATIC_CONSTANT "constant value"…

如何在 Spring Boot 中指定不同的配置文件?

介绍 Spring Boot 提供了多种方式来管理和加载配置文件&#xff0c;特别是在多环境配置下&#xff0c;比如开发、测试和生产环境。通过指定不同的配置文件&#xff0c;可以灵活地调整应用程序的行为&#xff0c;以适应不同的需求。本文将介绍在 Spring Boot 中如何指定使用不同…

在centOS源码编译方式安装MySQL5.7

一、前言 在生产环境中部署数据库时&#xff0c;很多人会选择直接使用 yum/apt 包管理器 安装 MySQL&#xff0c;这样简单快速&#xff0c;但缺点是版本受限&#xff0c;灵活性不足。对于需要指定版本、启用特定编译参数或优化的场景&#xff0c;源码编译安装 MySQL 就显得非常…

探讨Hyperband 等主要机器学习调优方法的机制和权衡

本篇文章Master Hyperband — An Efficient Hyperparameter Tuning Method in Machine Learning深入探讨了Hyperband这一高效的超参数调优方法。文章的技术亮点在于其结合了多臂老虎机策略和逐次减半算法&#xff0c;能够在大搜索空间中快速剔除表现不佳的配置&#xff0c;从而…

Mysql:InnoDB 关键特性

目录 一、插入缓冲&#xff08;Change Buffer&#xff09;→ 快递驿站的 “临时存放区” 二、两次写&#xff08;Double Write&#xff09;→ 重要文件的 “备份存档” 三、自适应哈希索引&#xff08;AHI&#xff09;→ 图书馆的 “热门书快捷查找区” 四、异步 IO&#x…

STM32-----SPI

SPI简介SCK:和I2C中SCL的时钟线一个作用&#xff0c;都是在高电平拿出数据&#xff0c;在低电平写数据MOSI:主机输出从机输入MISO:主机输入从机输出&#xff0c;只有当对应从机的SS为低电平&#xff0c;从机的MISO引脚才能设置推挽输出&#xff0c;当从机SS为高电平时&#xff…

华为考试:HCIE数通考试难度分析

随着信息技术的飞速发展&#xff0c;网络技术已成为支撑各行各业运转的重要基础&#xff0c;市场对高水平网络技术人才的需求持续增长。HCIE作为华为认证体系中的最高级别认证&#xff0c;代表了网络技术领域的专业顶尖水平。本文将对HCIE数通认证的考试内容、难度及备考策略进…

一些常用的激活函数及绘图

深度网络的一些常用激活函数&#xff0c;并通过matplot绘制出来&#xff1a; import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE苹果手机iPhone 17展示动画片头模板 App Promo Phone 17 Pro

专为 App 发布会、电商促销、新品宣传 打造的 iPhone 17 Pro 动画展示 AE 模板。 4K 超清分辨率 26 张可替换照片位&#xff0c;无需第三方插件&#xff0c;拖拽即可输出专业级手机宣传片。 核心亮点 4K 超清&#xff1a;38402160 分辨率&#xff0c;大屏投放与社媒高清压缩无…

基于Python的云原生TodoList Demo 项目,验证云原生核心特性

以下是一个基于 Python 的云原生 TodoList Demo 项目&#xff0c;涵盖 容器化、Kubernetes 编排、CI/CD、可观测性、弹性扩缩容 等核心云原生特性&#xff0c;代码简洁且附详细操作指南&#xff0c;适合入门学习。项目概览 目标&#xff1a;实现一个支持增删改查&#xff08;CR…

go 日志的分装和使用 Zap + lumberjack

自带的log无法满足 按大小轮转 &#xff0c;按天数清理旧日志 &#xff0c;自动压缩 &#xff0c;限制备份数量 &#xff0c;防止磁盘写满 &#xff0c;生产环境推荐 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技术栈梳理】01-核心框架与运行时(CLR)

文章目录1 .NET Runtime&#xff08;CLR-公共语言运行时&#xff09;1.1 中间语言 IL1.1.1 从源代码到通用中间语言&#xff08;IL&#xff09;1.1.2 运行时加载&#xff1a;CLR登场1.1.3 核心步骤&#xff1a;即时编译 (JIT Compilation)1.1.4 执行与内存管理&#xff08;GC&a…

Claude Code 平替:OpenAI发布 Codex CLI ,GPT-5 国内直接使用

openai推出的命令行编程工具codex已经可以使用最新 GPT-5 模型&#xff0c;拥有可媲美 Claude Code 的 AI 编码能力。本文将指导你在 Windows 系统上部署原生的 Codex CLI 程序&#xff0c;并接入超低价中转 API&#xff0c;让你在国内直接用上超高性价比的 OpenAI Codex CLI 应…

在VS2022的WPF仿真,为什么在XAML实时预览点击 ce.xaml页面控件,却不会自动跳转到具体代码,这样不方便我修改代码,

在VS2022的WPF仿真&#xff0c;为什么在XAML实时预览点击 WpfApp1\FunctionalModule\08Replace\Replace.xaml页面控件&#xff0c;却不会自动跳转到具体代码&#xff0c;这样不方便我修改代码&#xff0c;

Git Bash 别名

有些常用的指令参数非常多&#xff0c;每次都要输入好多参数&#xff0c;我们可以使用别名。Linux 系统中很多 shell&#xff0c;包括 bash&#xff0c;sh&#xff0c;zsh&#xff0c;dash 和 korn 等&#xff0c;不管哪种 shell 都会有一个 .bashrc 的隐藏文件&#xff0c;它就…

Centos7部署ceph存储

一、准备5台centos7主机 node节点双网卡&#xff08;1个内部检测&#xff0c;1个外部使用&#xff09;node节点都添加新网卡关闭防火墙和上下文都需要添加hosts文件都需要cat > /etc/hosts << EOF > 127.0.0.1 localhost localhost.localdomain localhost4 loca…

2025.9.10总结

今日感悟&#xff1a;刷到00后下班去菜市场捡菜的热点视频&#xff0c;确实挺有意思&#xff0c;不得不说&#xff0c;又省钱又好玩。虽然每天晚上能免费领个25块钱的水果回去&#xff0c;但确实没有什么新鲜感了。别人下班还能捡捡菜放松下&#xff0c;我下班&#xff0c;除了…

【数据结构与算符Trip第2站】稀疏数组

稀疏sparsearray数组 什么是稀疏数组&#xff1f; 稀疏数组是一种特殊的数据结构&#xff0c;用于高效存储和表示大部分元素为零&#xff08;或默认值&#xff09;的数组。它通过只存储非零元素的位置和值来节省内存空间。是一种压缩数组。 实现原理 在Go语言中&#xff0c;稀疏…