基于电商场景的高并发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 发送消息的可能!

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

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

相关文章

基于Matlab/Simulink不平衡电网工况下级联H桥光伏并网逆变器仿真模型

本次更新的内容为级联H桥光伏并网逆变器相关的控制,后面会针对储能系统在级联H桥拓扑上的应用进行分享。由于传统发电造成的环境污染问题和光伏电池板价格持续创新低,太阳能从众多种类的可再生能源中拔地而起,因而光伏逆变器成为国内外学者和…

分布式锁功效初探——以电商问题为例

文章目录 电商库存问题单机处理-Sychronized多机器处理-分布式锁入门级别,用redis实现,setnx问题1:逻辑可能异常,造成死锁问题2:机器宕机问题3:锁一直失效,乱套锁续命 redisson分布式丢锁问题主…

前菜---二叉树+堆的小练习

目录 前言🏜️ 1. 二叉树性质总结⛱️ 1.2 性质3⏰ 2. 二叉树性质小练习🏕️ 3. 答案解析💡 4. 堆概念结构小练习🪔 5. 答案解析🧿 6. 前/中/后/层序遍历小练习🔫 7. 答案解析🧺 后语…

C++中的内存锁定

内存锁定(memory locking)是确保进程保留在主内存中并且免于分页的一种方法。在实时环境中,系统必须能够保证将进程锁定在内存中,以减少数据访问、指令获取、进程之间的缓冲区传递等的延迟。锁定内存中进程的地址空间有助于确保应用程序的响应时间满足实…

LeetCode 1954. 收集足够苹果的最小花园周长

一、题目 1、题目描述 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。 给你一个整数 need…

DevC++ 用C语言的多线程 实现简单的客户端和服务器

知识来源一: 使用Dev-C实现简单的客户端和服务器-CSDN博客 此先生的博客使用的是win32 SDK来创建多线程,然后鄙人对这个版本的多线程细节不明。于是又重新用C语言的线程替代win32API,以此继续学习服务器代码。 知识来源二:DevC 多线程创建…

Windows 11中显示文件扩展名的方法与Windows 10大同小异,但前者更人性化

默认情况下,Windows 11会隐藏已知文件类型的文件扩展名。这可能会使在不首先打开文件的情况下很难识别文件类型。 幸运的是,你可以将Windows 11配置为显示已知文件类型的扩展名。该方法类似于Windows 10,但该选项现在组织在下拉菜单中&#…

在线客服系统:解决常见问题的实用工具与解决方案

市场得不断发展促使着消费者服务意识的觉醒,越来越多的消费者在购买产品的时候不仅看产品的功能、外观、性能,还关注品牌的服务质量。在线客服系统的出现帮助企业解决了客户服务难的问题。接下来,我们具体聊一聊在线客服系统能解决哪些问题&a…

BTF:实践指南

本文地址:BTF:实践指南 | 深入浅出 eBPF 1. BPF 的常见限制 1.1 调试限制1.2 可移植性2. BTF 是什么?3. BTF 快速入门 3.1 BPF 快速入门3.1 BTF 和 CO-RE4. 结论 BPF 是 Linux 内核中基于寄存器的虚拟机,可安全、高效和事件驱动…

Bresenham 算法

1965 年,Bresenham 为数字绘图仪开发了一种绘制直线的算法,该算法同样使用于光栅扫描显示器,被称为 Bresenham 算法。 原理 算法的目标是选择表示直线的最佳光栅位置。Bresenhan 算法在主位移方向上每次递增一个单位。另一个方向的增量为 0…

浅谈Redis分布式锁(下)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 自定义Redis分布式锁的…

分布式核心技术之分布式共识

文章目录 什么是分布式共识?分布式共识方法PoWPoSDPoS 三种分布式共识算法对比分析 选主过程就是一个分布式共识问题,因为每个节点在选出主节点之前都可以认为自己会成为主节点,也就是说集群节点“存异”;而通过选举的过程选出主节…