zoukankan      html  css  js  c++  java
  • RocketMQ学习笔记(7)----RocketMQ的整体架构

    1. RocketMQ主要的9个模块,如图:

      

    2. 模块介绍

      1. rocketmq-common:通用的常量枚举,基类方法或者数据结构,按描述的目标来分包,通俗易懂。报名有admin,consumer,filter,hook,message等。

      2. rocketmq-remoting:用Netty写的客户端和服务端,fastjson做的序列化,自定义二进制协议

      3. rocketmq-sevutil: 只用一个ServerUtil类,类注解是,只提供Server程序依赖,目的是为了拆解客户端依赖,尽可能减少客户端的依赖

      4. rocketmq-store: 存储服务,消息存储,索引存储,commitLog存储

      5. rocketmq-client: 客户端,包含producer端和consumer端,消息的生产发送和接收消费的过程。

      6. rocketmq-filtersrv: 消息过滤器server

      7. rocketmq-broker: 对consumer和producer来说是服务端,接收producer发来的消息并存储,同时consumer来这里拉取消息。

      8. rocketmq-tools:命令行工具。

      9. rocketmq-namesrv:NameServer,类似zookeeper注册中心,这里保存着消息的TopicName,队列等运行时的meta信息。一般系统分dataNode和nameNode,这里是nameNode。

    3. 结构层次说明

      模块依赖:最底层为基础实现,最上层为对外提供的服务模块

      

    4. NameServer与Zookeeper

      在rocketmq的早版本(2.x)的时候,是没有namesrv组件的,用的是zookeeper做分布式协调和服务发现,但是后期阿里数据根据实际业务需求进行改进和优化,自组研发了轻量级的namesrv,用于注册Client服务与Broker的请求路由工作,namesrv上不做任何消息的位置存储(频繁操作zookeeper的位置存储数据会影响整体集群性能)

      rocketmq-namesrv模块介绍:

      rocketmq-namesrv扮演着nameNode角色,记录运行时消息相关的meta信息以及broker的filtersrv运行时信息,可以部署集群。

      我们可以吧rocketmq-namesrv理解成一个轻量级的zookeeper,他比zookeeper性能更好,并且比zookeeper的可靠性更强。

      rocketmq-namesrv主要是节点之间相互进行心跳检测,数据通信,集群高可靠性,一致性,容错性等方面的核心模块。

      rocketmq-namesrv的底层通信机制与neetty进行联系,上层通信与各个模块产生强一致性的对应关系,当broker,producer,consumer都运行后,namesrv一共有八类线程,如:守护线程,定时任务线程,netty的boss线程,NettyEventExecuter线程,DestroyJavaJVM线程,Work线程,Handler线程,RemotingExecutorThread线程。

    5. 底层通信

      1. ServerHouseKeepingService:守护线程,本质是ChannelEventListener,监听broker的channel变化来更新本地的RouteInfo。

      2. NSScheduledThread1: 定时任务线程,定时跑2个任务,第一个是,每隔十分钟扫描出不活动的broker,然后冲routeInfo中删除,第二个是,每隔十分钟打印configTable的消息。

      3. NettyBossSelector: Netty的boss线程(Accept线程),这里只有一个线程

      4.NettyEventExecuter:一个单独的线程,监听NettyChannel状态变化和通知ChannelEventListener要响应的动作。

      5. DestroyJavaVM:Java虚拟机析构钩子,一般是当虚拟机关闭时用来清理或者释放资源的。

      6. NettyServerSelector_x_x: Netty的Work线程(io)线程,这里可能有多个线程

      7. NettyServerWorkerThread_x:执行ChannelHandler方法的线程,ChannelHandler运行在线程上,这里可能有多个线程。

      8. RemotingExecutorThread_x: 服务端逻辑线程,这里可能有多个线程。rocketmq-namesrv扮演者nameNode角色,记录运行时meta信息已经broker和filtersrv运行时信息,可以部署集群。

    6. 数据存储

      rocketmq-broker模块介绍:

      这个是数据存储的核心,也就是真正的MQ服务器,我们所谓的消息存储,接收,拉去,推送这些操作都是在broker上进行的。

      rocketmq-filtersrv:

      在rocketmq中,使用独立的一个模块去对数据进行过滤,实现了真正意义上的高内聚,低耦合的设计思想。

      我们在使用rocketmq-filtersrv模块的时候,也需要启动filter服务。

    原文 RocketMQ学习笔记(7)----RocketMQ的整体架构

  • 相关阅读:
    CTFHub-Web-Web前置技能-HTTP协议-响应包源代码详解
    BurpSuite环境安装及设置
    i2 Analyst’s Notebook 9学习笔记之入门、基本概念和数据接口
    Python 练习题:用索引取出LIST中的值
    python 练习题:小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点
    zabbix4.0 本地安装详解及步骤
    CentOS 7 安装 mysql 5.7.27 for zabbix
    win7系统 右击任务栏 资源管理器 弹出菜单“已固定”和“最近”项目不显示故障处理
    CentOS 7 新系统 手动配置网络 简要步骤
    CentOS7 firewalld防火墙 启动 关闭 禁用 添加删除规则等 常用命令
  • 原文地址:https://www.cnblogs.com/xiaoshen666/p/10867599.html
Copyright © 2011-2022 走看看