【MQ】如何保证消息队列的高可用?

 RocketMQ

  • NameServer集群部署

    • Broker做了集群部署

      • 主从模式

        • 类型:同步复制、异步复制

        • 主节点返回消息给客户端的时候是否需要同步从节点

        • Dledger:要求至少消息复制到半数以上的节点之后,才给客户端返回写入成功

        • slave定时从master同步数据(同步刷盘、异步刷盘),master一旦挂了,slave提供消费服务,不能写入消息

Kafka

  • Kafka 从 0.8 版本开始提供了高可用机制,可保障一个或多个 Broker 宕机后,其他 Broker 能继续提供服务

分区副本、备份机制

  • 同一个 Partition 存在多个消息副本,每个 Partition 的副本通常由 1 个 Leader 及 0 个以上的 Follower 组成,
    • Kafka 会尽量将所有的 Partition 以及各 Partition 的副本均匀地分配到整个集群的各个 Broker 上

    • 多副本机制

      • 分区(Partition)引入了多副本(Replica)机制。

      • 多分区、多副本机制好处呢?

        • 1. Kafka 通过给特定 Topic 指定多个 Partition分区, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力(负载均衡)。

        • 2. Partition 可以指定对应的 Replica 数, 这也极大地提高了消息存储的安全性, 提高了容灾能力,不过也相应的增加了所需要的存储空间。

ACK 机制

  • 生产者发送消息中包含 acks 字段,该字段代表 Leader 应答生产者前 Leader 收到的应答数
    • 发送的 acks=1 和 0 消息会出现丢失情况,为了不丢失消息可配置生产者acks=all & min.insync.replicas >= 2

    • 「acks=0」

      • 生产者无需等待服务端的任何确认,因此 acks=0 不能保证服务端已收到消息

    • 「acks=1」默认值

      • 只要 Partition Leader 接收到消息而且写入本地磁盘了,就认为成功了,不管其他的 Follower 有没有同步

    • 「acks=all or -1」

      • 服务端会等所有的 follower 的副本受到数据后才会收到 leader 发出的 ack,这样数据不会丢失

      • Broker 有个配置项min.insync.replicas(默认值为 1)代表了正常写入生产者数据所需要的最少 ISR 个数

ISR 机制

  • ISR 中的副本都是与 Leader 同步的副本,不在 ISR 中的Follower副本就被认为是没有资格的
    • Follower 周期性地向 Leader 发送 FetchRequest 请求,发送时间间隔配置在replica.fetch.wait.max.ms中,默认值为 500

    • 每个分区的 Leader 负责维护 ISR 列表并将 ISR 的变更同步至 ZooKeeper,被移出 ISR 的 Follower 会继续向 Leader 发 FetchRequest 请求,试图再次跟上 Leader 重新进入 ISR

    • ISR 中所有副本都跟上了 Leader,通常只有 ISR 里的成员才可能被选为 Leader

主从同步

  • 1、Follower副本通过发送Fetch请求来同步Leader副本上的数据。
    • Unclean 领导者选举

      • 当 Kafka 中unclean.leader.election.enable配置为 true(默认值为 false)且 ISR 中所有副本均宕机的情况下,

      • 开启 Unclean 领导者选举可能会造成数据丢失,但好处是,它使得分区 Leader 副本一直存在,不至于停止对外提供服务,因此提升了高可用性,

    • LEO(Log End Offset)

      • 对于Leader副本和每个Follower副本来说,它们都有各自的LEO

      • LEO是下一个要写入的消息的偏移量

    • HW(High Watermark)

      • HW是分区中所有副本的已提交消息的最大偏移量。是分区中所有ISR(In-Sync Replicas)副本的LEO中的最小值

      • 只要分区的Leader副本和至少一个Follower副本保持同步,消费者就能看到所有已提交的消息,即使Leader副本发生故障

    • 确保了Kafka在分区的Leader副本发生故障时,可以从ISR中选举出一个Follower副本作为新的Leader,

Leader 选举 & 故障恢复机制

  • 「Kafka 从 0.8 版本开始引入了一套 Leader 选举及失败恢复机制」
    • 在集群所有 Broker 中选出一个 Controller,负责各 Partition 的 Leader 选举以及 Replica 的重新分配

    • Controller

      • 集群中的 Controller 也会出现故障,因此 Kafka 让所有 Broker 都在 ZooKeeper 的 Controller 节点上注册一个 Watcher。

    • 当出现 Leader 故障后,Controller 会将 Leader/Follower 的变动通知到需要为此作出响应的 Broker。

    • Kafka 使用 ZooKeeper 存储 Broker、Topic 等状态数据,Kafka 集群中的 Controller 和 Broker 会在 ZooKeeper 指定节点上注册 Watcher(事件监听器),以便在特定事件触发时,由 ZooKeeper 将事件通知到对应 Broker

    • 当 Broker 发生故障后,由 Controller 负责选举受影响 Partition 的新 Leader 并通知到相关 Broker

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

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

相关文章

ReactNative react-devtools 夜神模拟器连调

目录 一、安装react-devtools 二、在package.json中配置启动项 三、联动 一、安装react-devtools yarn add react-devtools5.3.1 -D 这里选择5.3.1版本,因为高版本可能与夜神模拟器无法联动,导致部分功能无法正常使用。 二、在package.json中配置启…

关于使用Mybatis-plus的TableNameHandler动态表名处理器实现分表业务的详细介绍

引言 随着互联网应用的快速发展,数据量呈爆炸式增长。传统的单表设计在面对海量数据时显得力不从心,容易出现性能瓶颈、查询效率低下等问题。为了提高数据库的扩展性和响应速度,分表(Sharding)成为了一种常见的解决方案…

【开源免费】基于Vue和SpringBoot的在线文档管理系统(附论文)

本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

智慧园区系统分类及其在提升企业管理效率中的创新应用探讨

内容概要 智慧园区的概念已经逐渐深入人心,成为现代城市发展中不可或缺的一部分。随着信息技术的飞速发展和数字化转型的不断推进,一系列智慧园区管理系统应运而生。这些系统不仅帮助企业提高了管理效率,还在多个方面激发了创新。 首先&…

图片上传实现图片预览的功能

文章目录 图片上传实现图片预览的功能一、引言二、拖拽上传实现预览1、HTML结构与样式2、JavaScript实现拖拽逻辑 三、选择文件上传实现预览1、HTML结构2、JavaScript实现预览逻辑 四、使用示例五、总结 图片上传实现图片预览的功能 一、引言 在现代网页设计中,图片…

电力晶体管(GTR)全控性器件

电力晶体管(Giant Transistor,GTR)是一种全控性器件,以下是关于它的详细介绍:(模电普通晶体管三极管进行对比学习) 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管(BJT&am…

Linux - 进程间通信(2)

目录 2、进程池 1)理解进程池 2)进程池的实现 整体框架: a. 加载任务 b. 先描述,再组织 I. 先描述 II. 再组织 c. 创建信道和子进程 d. 通过channel控制子进程 e. 回收管道和子进程 问题1: 解答1&#xff…

【阅读笔记】New Edge Diected Interpolation,NEDI算法,待续

一、概述 由Li等提出的新的边缘指导插值(New Edge—Di-ected Interpolation,NEDI)算法是一种具有良好边缘保持效果的新算法,它利用低分辨率图像与高分辨率图像的局部协方差问的几何对偶性来对高分辨率图像进行自适应插值。 2001年Xin Li和M.T. Orchard…

Windows安装Miniconda和PySide6以及配置PyCharm

目录 1. 选择Miniconda 2. 下载Miniconda 3. 安装Miniconda 4. 在base环境下创建pyside6环境 5. 安装pyside6环境 6. 配置PyCharm环境 7. 运行第一个程序效果 1. 选择Miniconda 选择Miniconda而没有选择Anaconda,是因为它是一个更小的Anaconda发行版&#x…

Linux之内存管理前世今生(一)

一个程序(如王者荣耀)平常是存储在硬盘上的,运行时才把这个程序载入内存,CPU才能执行。 问题: 这个程序载入内存的哪个位置呢?载入内核所在的空间吗?系统直接挂了。 一、虚拟内存 1.1 内存分…

Java基于SSM框架的互助学习平台小程序【附源码、文档】

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

【Rust自学】16.3. 共享状态的并发

喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的:Do not commun…

Python 数据分析 - Matplotlib 绘图

Python 数据分析 - Matplotlib 绘图 简介绘图折线图单线多线子图 散点图直方图条形图纵置横置多条 饼图 简介 Matplotlib 是 Python 提供的一个绘图库,通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰富的统计图,安装使用 pip install…

Java进阶(二):Java设计模式

目录 设计模式 一.建模语言 二.类之间的关系 1.依赖关系 2.关联关系 3.聚合关系 4.组合关系 5.继承关系 6.实现关系 三.面向对象设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒置 接口隔离原则 迪米特原则 组合/聚合(关联关系)复用原则 四.23种设计模式…

双层Git管理项目,github托管显示正常

双层Git管理项目,github托管显示正常 背景 在写React项目时,使用Next.js,该项目默认由git托管。但是我有在项目代码外层记笔记的习惯,我就在外层使用了git托管。 目录如下 code 层内也有.git 文件,对其托管。 我没太在意&…

群晖docker获取私有化镜像http: server gave HTTP response to HTTPS client].

群晖docker获取私有化镜像提示http: server gave HTTP response to HTTPS clien 问题描述 层级时间用户事件Information2023/07/08 12:47:45cxlogeAdd image from xx.xx.31.240:1923/go-gitea/gitea:1.19.3Error2023/07/08 12:47:48cxlogeFailed to pull image [Get "http…

机器学习:支持向量机

支持向量机(Support Vector Machine)是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的广义线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。 假设两类数据可以被 H x : w T x…

相互作用感知的蛋白-小分子对接模型 - Interformer 评测

Interformer 是一个应用于分子对接和亲和力预测的深度学习模型,基于 Graph-Transdormer 架构的模型,利用相互作用(氢键、疏水)感知的混合密度网络(interaction-aware mixture den sity network, MDN&#x…

如果我想设计一款复古风格的壁纸,应该选什么颜色?

设计复古风格的壁纸时,选择合适的颜色是营造怀旧和经典氛围的关键。复古风格通常使用一些温暖、柔和且带有岁月痕迹的色调。以下是一些适合复古风格壁纸的颜色选择和搭配建议: 一、复古风格的主色调 棕色系: 特点:棕色是复古风格的…

AI 浪潮席卷中国年,开启科技新春新纪元

在这博主提前祝大家蛇年快乐呀!!! 随着人工智能(AI)技术的飞速发展,其影响力已经渗透到社会生活的方方面面。在中国传统节日 —— 春节期间,AI 技术也展现出了巨大的潜力,为中国年带…