基于电商场景的高并发RocketMQ实战-NameServer内存中核心数据模型分析、内核级Producer发送消息流程

🌈🌈🌈🌈🌈🌈🌈🌈
【11来了】文章导读地址:点击查看文章导读!
🍁🍁🍁🍁🍁🍁🍁🍁

NameServer 内存中核心数据模型分析

NameServer 中关键的数据模型结构如下:

  • clusterAddrTable:存储 Broker 集群表,其中 Broker01 表示第一个 Broker 分组

    clusterAddrTable: {
      BrokerCluster01: [Broker01, Borker02]
    }
    
  • brokerAddrTable:存储 Broker 地址表,存储了每个 Broker 分组的信息,以及该 Broker 分组中每个主从 Broker 的地址

    brokerAddrTable: [
      {
        Broker01: {
          cluster: BrokerCluster01,
          brokerAddrs: [
            0/*brokerId,用于区分主从*/: ip:port,
            1/*brokerId,用于区分主从*/: ip:port
          ]
        },
        Broker02: {
          cluster: BrokerCluster01,
          brokerAddrs: [
            0/*brokerId,用于区分主从*/: ip:port,
            1/*brokerId,用于区分主从*/: ip:port
          ]
        }
      }
    ]
    
  • brokerLiveTable:存储活跃的 Broker,其中 haServerAddr 存储与当前 Broker 互为主备的 Broker 地址

    brokerLiveTable: {
      ip:port: {
        lastUpdateTimestamp: xxxx,
        haServerAddr: ip:port
      }
    }
    
  • topicQueueTable:存储 Topic 在每个 Broker 中的队列数量

    topicQueueTable: {
      Topic01: [
        {
          brokerName: Broker01,
          readQueueNums: 4,
          writeQueueNums: 4
        },
        {
          brokerName: Broker02,
          readQueueNums: 4,
          writeQueueNums: 4
        }
      ]
    }
    

内核级 Producer 发送消息流程

消息生产者发送消息根据 Topic 进行发送:

  1. 根据 Topic 找到这个 Topic 的 Queue 在每台 Broker 上的分布,进行负载均衡
  2. 通过负载均衡选择一个队列,根据 topicQueueTable 可以知道该 Queue 是属于哪一个 Broker 的
  3. 那么接下来就查找到 Broker 主节点(根据 brokerId 判断),将数据发送到这个 Broker 主节点中,再写入对应的 Queue

那么如果当前消息发送到当前 Broker 组失败的话,在一段时间内就不会选择当前出现故障的 Queue了,会重新选择其他的 Broker 组中的 Queue 进行发送

选择 Broker 以及发送失败流程图如下图黄色部分所示:

在这里插入图片描述

RokcetMQ 的 NameServer 中是有 故障的延迟感知机制 ,即当 Broker 出现故障时,对于生产者来说,并不会立即感知到该 Broker 故障

NameServer 中虽然每隔 10s 中会去检查是否有故障 Broker,将故障 Broker 剔除掉,但是此时生产者的 Topic 缓存中还是有故障 Broker 的信息的,只有等 30s 之后刷新,才可以感知到这个 Broker 已经故障了

通过这个 故障的延迟感知机制 可以避免去做许多麻烦的操作,如果 Broker 挂掉之后,要让生产者立马感知到,需要通过 NameServer 去通知许多 Producer,并且如果通知丢失,还是有向故障 Broker 发送消息的可能!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

统计和绘图软件GraphPad Prism mac功能特点

GraphPad Prism mac是一款专业的统计和绘图软件,主要用于生物医学研究、实验设计和数据分析。 GraphPad Prism mac功能和特点 数据导入和整理:GraphPad Prism 可以导入各种数据格式,并提供直观的界面用于整理、编辑和管理数据。用户可以轻松…

Django开发1

Django开发1 初识Django1.安装django2.创建项目2.1 在终端2.2 Pycharm 3. 创建app4.快速上手4.1 再写一个页面4.2 templates模板4.3 静态文件4.3.1 static目录4.3.2 引用静态文件 5.模板语法//Django开发案例:联通新闻中心6.请求和响应案例:用户登录7.数…

[java] 注释

目录 单行注释: 多行注释: 文档注释: doc标签 单行注释: 多行注释: 注意多行注释不能嵌套多行注释: 文档注释: 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档,一般写在类。 doc标签 标签 描述 示例 …

“抓取再吸取的连续操作学习”研究工作发表于IEEE Trans. on Robotics:仿人手的柔性抓取,超人手的指背吸取!

长期以来,抓取一直被认为是机器人操作中一项重要而实际的任务。然而,实现对不同物体的稳健和有效的抓取具有挑战性,因为它涉及夹具设计、感知、控制和学习等。最近基于学习的方法在抓取各种新物体方面表现出优异的性能。然而,这些…

C语言用两个函数求最大公约数和最小公倍数

目录 1【c语言】(函数)写两个函数,分别求两个整数的最大公约数和最小公倍数。在主函数中输入两个数,分别调用这两个函数,并输出结果 2代码: 3运行代码: 4总结: 1【c语言】(函数)写两个函数,分别求两个整数的最大公约数和最小公倍数。在主函数中输入两…

C++初阶——类和对象

呀哈喽,我是结衣 C入门之后,我们就进入了C的初阶的学习了,在了解类和对象之前,我们还是先了解,面向过程和面向对象的初步认识。 在本篇博客中,我们要讲的内容有 1.面向过程和面向对象初步认识 2.类的引入 3…

浅析海博深造

文章目录 深造作用 留学种类 选专业 择校 申请流程 申请方式 深造作用 1、个人能力提升(学术专业、语言、新文化或新生活方式) 2、更好的职业发展(起点更高、结交新朋友或扩大社交圈) 3、北京上海落户优惠 4、海外居留福…

抖音小店无货源怎么做?全新玩法,全新的思路!

大家好,我是电商糖果 抖音小店已经不能拍单了,无货源模式是不是不能做了? 自从不能拍单的规则出来之后,问这个问题的朋友特别多。 糖果做无货源电商七年了,做过天猫,京东,闲鱼,20…

MySQL部署之yum安装

MySQL https://www.mysql.com //mysql官网 yum安装步骤 yum安装 清理环境 [rootmysql ~]# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -yuserdel -r mysql[rootmysql ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /use/bin/m…

HarmonyOS的装饰器之BuilderParam 理解

BuilderParam 装饰器 使用时间:当定义了一个子组件,并且子组件的build()中有一个布局在不同的父组件,实现效果不一样的时候,可以在子组件中用这个BuilderParam装饰器, 在父组件用Builder 装饰器进行实现,然…

Linux操作系统基础(一)系统和软件的安装

Linux操作系统简介 Linux是一种自由和开放源码的类Unix操作系统。该操作系统的内核由芬兰人林纳斯托瓦兹在1991年10月5日首次发布,再加上用户空间的应用程序之后,就成为了Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。 Linux…

【12.23】转行小白历险记-算法02

不会算法的小白不是好小白,可恶还有什么可以难倒我这个美女的,不做花瓶第二天! 一、螺旋矩阵 59. 螺旋矩阵 II - 力扣(LeetCode) 1.核心思路:确定循环的路线,左闭右开循环,思路简…

RK3588-TVM-GPU推理模型

1.前言 之前的博客已经在RK3588上安装了tvm的mali-gpu的版本,我们整理一下思路,本文将从模型的转换和调用两个方面进行讲解,tvm使用的是0.10版本,模型和代码也都是tvm官方的案例。 2.onnx模型转换 将ONNX格式的ResNet50-v2模型转…

基于协同过滤的电影评论数据分析与推荐系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目介绍 随着社会的发展,人们生活水平的提高,欣赏电影逐渐成为人们闲暇时的主要娱乐方式之一。本文电影推荐系统是为了给顾客提供方便快捷的热门电影推荐以及查询电影资讯而建立的&…

CSB文件上传漏洞 -->Day4(图片挂马)

22二号,冬至啦,深圳这边只有5(尊嘟好冷啊),写这篇文章的时候都已经是凌晨一点了,相信大部分的人都在温暖的被窝里面了吧!!(可怜的我,还得写writeup&#xff0…

JSP打印直角三角形

代码&#xff1a; <%page language"java" contentType"text/html;charsetutf-8"%> <html> <head><title>expressionDemo</title> </head> <body> <h1>以直角三角形的形式输出数字</h1> <table&…

Hadoop入门学习笔记——二、在虚拟机里部署HDFS集群

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 二、在虚拟机里部署HDFS集群2.1. 部署node1虚拟机2.2. 部…

如何在更新 Windows 11 后恢复误删除的文件

在本分步指南中&#xff0c;您将找到在 Windows 11 更新后恢复已删除文件的有用提示和方法。了解数据丢失的原因&#xff1a; 最新版本的 Windows 11 一直是热门话题之一&#xff0c;微软以突破性的方式重新推出了他们的操作系统。 从优雅的界面到严格的安全管理&#xff0c;…

敏捷时代的架构

在敏捷时代&#xff0c;架构如何适应敏捷原则&#xff0c;架构师如何以敏捷的方式与各个团队合作&#xff0c;本文希望能够给出这些问题的答案。原文: Architecture in the Age of Agile 前言 在快节奏的软件开发领域&#xff0c;架构和敏捷这两个看似截然不同的概念碰撞在一起…

Java设计模式-适配器模式

目录 一、生活中的适配器例子 二、基本介绍 三、工作原理 四、类适配器模式 &#xff08;一&#xff09;类适配器模式介绍 &#xff08;二&#xff09;应用实例 &#xff08;三&#xff09;类适配器模式注意事项和细节 五、对象适配器模式 &#xff08;一&#xff09…