专栏首页后端技术学习RocketMQ的NameServer执行流程学习梳理

RocketMQ的NameServer执行流程学习梳理

RocketMQ的NameServer执行流程学习梳理

首先看流程图

从流程图中,我们可以梳理如下信息:

首先NamesrvStartUp启动,首先经过main()方法,也是我们常见的main方法进入到main0()执行创建controller操作与启动controller操作这两个操作。而创建controller的操作则首先需要拿到namesrvConfig的配置信息和NettyServerConfig的配置信息,此时会 创建这两个对象,并填充配置信息然后放入到创建的controller对象中的构造函数中,并进行controller的启动操作,而启动操作首先会初始化一些信息和添加jvm钩子,也即会进行如下操作:加载键值对配置管理器、创建远程服务器remotingServer,创建远程线程池remotingExecutor、注册处理器、创建两个定时任务执行心跳检查、注册jvm钩子,启动Controller。

那么问题来了,为什么要使用nameServer作为注册中心,而没有使用zookeeper呢?

与nameServer相比,zookeeper:1.复杂性:zookeeper基于CAP理论实现,其宕机之后,会进行选举,而选举的过程本身就是一个耗时的过程2.可用性:zookeeper实现是基于CP的,因此zookeeper是强调强一致性的,其牺牲了可用性具体体现:同时nameServer复杂性降低在于其代码量少,同时nameServer节点之间互不通信,因此无法进行数据复制。但可通过部署多台broker来实现高可用。因为broker的高可用方案在于如果broker服务器没有宕机时,进行轮询队列,发送消息;而当brokerA服务器宕机时,则会采用的策略是:例如在接下来的5分钟内会跳过BrokerA,而选择其他的broker中的队列,进行消息发送。此时没有涉及到选举过程,不需要在这里耗时选举。

路由注册信息:zookeeper,数据只要写到主节点,就会进行数据复杂到从节点。而NameServer的各个节点是互不通信的,因此无法进行数据复制。在broker节点启动时,轮询nameServer列表,与每个nameServer建立长连接,发起注册请求。NameServer内部会维护Broker列表,用来动态存储Broker信息。Broker和NameServer之间会进行心跳检测,broker每隔30s会将最新的心跳包信息发生给NameServer。心跳包中包含了Broker的相关信息,NameServer接收到之后,会更新时间戳,记录Broker的最新存活时间,如果broker发生的的最新时间戳与当前时间相比超过120s则进行路由剔除操作。

NameServer Topic路由注册中读写锁:对broker表允许并发读,串行写,此时可以使用读写锁。

本文分享自微信公众号 - 后端技术学习(gh_9f5627e6cc61),作者:路行的亚洲

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM学习二

    jps、jstat、jinfo、jhat、jstack、jconsole、jmap、MAT、Btrace、psi_probe监控tomcat,通过gceasy查...

    路行的亚洲
  • Rocketmq学习一

    1.由于rocketmq需要依赖nameServer,类似于zookeeper。首先启动时,配置好NamesrvStartup的环境变量信息,也即rocketm...

    路行的亚洲
  • Dubbo调用流程学习总结

    首先我们知道Dubbo是一个RPC框架,因此解决的问题是服务治理,这个治理是解决服务注册和调用列表的维护治理,产生注册中心维护服务列表和更新,同时方便远程调用和...

    路行的亚洲
  • JS魔法堂:IMG元素加载行为详解

    一、前言                               在《JS魔法堂:jsDeferred源码剖析》中我们了解到img元素加载失败可以作为函数异...

    ^_^肥仔John
  • phalcon-入门篇8(Model层基础使用2)

    phalcon-入门篇8(Model层基础使用2) ? 本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的...

    喵了个咪233
  • 金九银十铁12,讲述一个收到腾讯、美团等五家大厂意向offer的大神闲聊技术面HR面腾讯美团头条搜狗贝壳

    互联网提前批基本告一段落,大大小小的offer也拿了一些,秉着回报社会,坚持中国特色社会主义,挽救新一代码农的思想,整理了下各个公司的面筋、考点,希望能激励各位...

    美的让人心动
  • 突破Java面试(36)-聊聊Dubbo的SPI机制

    前面基础性的东西问完了,确定你应该了解Dubbo,那么自然问个稍微难的问题,就是SPI,先问问你这是个啥,然后问问你怎么实现的!

    JavaEdge
  • vue --- 脚手架初始化项目中配置文件webpack.base.conf.js代码含义

    小蔚
  • Factorization Machine

    logistics regression algorithm model中使用的是特征的线性组合,最终得到的分割平面属于线性模型,但是线性模型就只能处理线性问题...

    西红柿炒鸡蛋
  • Factorization MachineFactorization Machine---因子分解机

    logistics regression algorithm model中使用的是特征的线性组合,最终得到的分割平面属于线性模型,但是线性模型就只能处理线性问题...

    西红柿炒鸡蛋

扫码关注云+社区

领取腾讯云代金券