首页 > 其他分享 >RocketMQ 基本概念

RocketMQ 基本概念

时间:2024-09-23 14:50:44浏览次数:3  
标签:Broker broker topic 集群 消息 nameserver 基本概念 RocketMQ


RocketMQ的由来



随着使⽤中队列和虚拟主题的增加,阿⾥巴巴团队使⽤的 ActiveMQ IO 模块达到了瓶颈。为了尽⼒通过节流、断路器或降级来解决这个问题,但效果不佳。所以开始关注当时流⾏的消息传递解决⽅案Kafka 。不幸的是, Kafka ⽆法满⾜要求(在这么多消息队列中间,kafka性能是最靠谱的,但是会出现丢消息的问题),尤其是在低延迟和⾼可靠性⽅⾯。



在这种情况下,决定发明⼀种新的消息传递引擎来处理更⼴泛的⽤例,从传统的发布/ 订阅场景到⼤容量实时零丢失交易系统。⽬前RocketMQ已经开源给 Apache 基⾦会。如今,已有 100 多家公司在其业务中使⽤开源版本的 RocketMQ 。



RocketMQ 由四部分组成:

  • 生产者 - Producer
  • 消费者 - Consumer
  • 协调中心 - NameServer
  • 暂存及传输组件 - Broker
  • 消息类型 - Topic
  • 消息队列 - Message Queue

RocketMQ 基本概念_消息发送

                                             RocketMQ角色关系图

技术架构


RocketMQ 基本概念_消息队列_02


RocketMQ架构上主要分为四部分,如上图所示:



  • Producer:消息发布的⻆⾊,⽀持分布式集群⽅式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进⾏消息投递,投递的过程⽀持快速失败并且低延迟。


左边的生产者可以是一个集群,右边是消费者,消费者也可以是一个集群。集群的作用就是提高性能和保证其稳定性。生产者集群里面会有多个生产者,生产者主要功能就是将消息发送给消息队列。



  • Consumer:消息消费的⻆⾊,⽀持分布式集群⽅式部署。⽀持以push推,pull拉两种模式对消息进⾏消费。同时也⽀持集群⽅式和⼴播⽅式的消费,它提供实时消息订阅机制,可以满⾜⼤多数⽤户的需求。

消费者主要功能就是从消息队列拉取消息,或者说接收消息。

  • NameServer(轻量级注册中心):NameServer是⼀个⾮常简单的Topic路由注册中⼼,其⻆⾊类似Dubbo中的zookeeper,⽀持Broker的动态注册与发现。


在nameserver集群里面,多台nameserver节点之间是无状态的,他们相互之间不需要知道彼此的状态。nameserver启动了,它不需要知道集群中有几台nameserver。


启动了nameserver1,那么nameserver1就是独立的个体。即使集群当中可能有nameserver2,nameserver3,对于nameserver1来说是不知道其他人的存在。这样的话就能够保证他们的无状态。



注册中心:有数据可以注册上来,那么还有订阅者从注册中心订阅到它所需要的数据。对于nameserver也是一样,什么样的数据可以注册上来呢?真正消息队列的中间件broker,broker可以理解为提供消息服务的角色。消息服务或者说整个rocketmq里面所有的功能,这样一个功能,工具,可以使用broker来描述。



主要包括两个功能:


  1. Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供⼼跳检测机制,检查Broker是否还存活。
  2. 路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和⽤于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从⽽进⾏消息的投递和消费。NameServer通常也是集群的⽅式部署,各实例间相互不进⾏信息通讯。Broker是向每⼀台NameServer注册⾃⼰的路由信息,所以每⼀个NameServer实例上⾯都保存⼀份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以动态感知Broker的路由的信息。

RocketMQ 基本概念_rocketmq_03

这里有很多broker,简单理解就是有很多rocketmq。 除了有好多台mq,还会发现有master和slave。两个broker之间构成了主从。

主从目的可以提升性能,读写可以在broker master,读可以在broke他slave。也就是两个broker都可以提供读的服务,这样性能会更加好。

当有一个master挂了,slave可以顶上,这样就形成了broker的高可用。两个broker都是主从关系,一个broker可以存放一部分数据,另外一个broker可以存放另外一部分数据。当然broker master1和broker master2的数据可以是相同的。

rockermq是重topic的mq,也就是它需要有topic才能整个工作机制可以顺利的运行。topic就是主题的意思。

对于生产者需要将消息发送到某一个topic上,但是实际的消息存储在broker上面,topic是用来区分消息的。


BrokerServer : Broker 主要负责消息的存储、投递和查询以及服务⾼可⽤保证, 为了实现这些功能,Broker 包含了以下⼏个重要⼦模块。



  1. Remoting Module:整个Broker的实体,负责处理来⾃clients端的请求。
  2. Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息
  3. Store Service:提供⽅便简单的API接⼝处理消息存储到物理硬盘和查询功能。
  4. HA Service:⾼可⽤服务,提供Master Broker 和 Slave Broker之间的数据同步功能。
  5. Index Service:根据特定的Message key对投递到Broker的消息进⾏索引服务,以提供消息的快速查询。

RocketMQ 基本概念_数据_04

对于生产者producer来说要将消息发送给某个topic上, 比如消息发送到t1这个topic,t1的topic在broker master1上面,那么消息就会存储在这个topic上面。如果又发消息给t2这个topic,那么t2 topic是放在broker master2上面。很显然这个消息会存储在broker master2上面。

RocketMQ 基本概念_数据_05

也就是生产者通过topic将消息进行区分,当然两个broker之间也可以保存相同的topic。

生产者是怎么将消息发送到broker上面的呢?它是怎么知道broker的地址呢?在broker集群里面会有很多的broker,这些broker要将自己的信息注册到nameserver上面。

在nameserver集群里面,多台nameserver节点之间是无状态的,他们相互之间不需要知道彼此的状态。nameserver启动了,它不需要知道集群中有几台nameserver。

启动了nameserver1,那么nameserver1就是独立的个体。即使集群当中可能有nameserver2,nameserver3,对于nameserver1来说是不知道其他人的存在。这样的话就能够保证他们的无状态。

broker会去将自己的信息同时注册到nameserver的每一台节点上面。比如broker master1里面存放了topic1这样一个topic。注册到nameserver里面就会有一条映射关系topic1->broker1,或者topic2->broker2,这样的映射关系就会存在于每一台nameserver。

RocketMQ 基本概念_消息发送_06

对于producter来说需要去做broker的discover。就是去发现broker,要发到t1上面,这样producer就要去nameserver里面订阅。发送到t1上面到底需要哪个broker呢?nameserver cluster会告诉你。

生产者拿到broker的地址,那么就会将发送到topic1的消息发送到这个broker上面broker master1上面。

消息发过去对于broker集群来说,站在生产者角度来说是同一个broker,只不过在这个地方部署了主从。主负责写,从负责读,主也能实现部分读数据的功能。

消费者要消费某一个topic,它也要去nameserver订阅broker,消费者的topic t1在哪个broker上面。然后连接到该broker上面。

标签:Broker,broker,topic,集群,消息,nameserver,基本概念,RocketMQ
From: https://blog.51cto.com/u_14035463/12089415

相关文章

  • 深入剖析RocketMQ消息消费原理
    本文参考转载至《RocketMQ技术内幕第2版》一.消息消费概述消息消费以组的模式开展,一个消费组可以包含多个消费者,每个消费组可以订阅多个主题,消费组之间有集群模式和广播模式两种消费模式。集群模式是当前主题下的同一条消息只允许被其中一个消费者消费。广播模式是当前主题......
  • 【车载开发系列】APQP基本概念
    【车载开发系列】APQP基本概念【车载开发系列】APQP基本概念【车载开发系列】APQP基本概念一.APQP基本概念二.APQP的特点三.APQP的要点四.APQP背后的哲学1)1-10-100法则—事前控制优于事后控制2)PDCA—持续改善五.APQP成功的关键1)第一类2)第二类3)第三类六.与PPAP的......
  • 测试环境路由可以这么做(六):RocketMQ增强
    现状消息队列的处理在测试环境路由中是非常特殊的存在,据说阿里ToG的团队都没有搞定RocketMQ。知道了这个消息,我们还是很值得骄傲的!!!消息队列有多种实现,当时我们公司同时使用了RabbitMQ、ActiveMQ、Kafka、RocketMQ四种,但业务主要使用的是ActiveMQ,未来计划统一为RocketMQ,所以......
  • 【理论篇】数据挖掘 第六章 挖掘频繁模式、关联和相关性:基本概念和方法(上)
    说明:文章为《数据挖掘:概念与技术原书第03版》的学习笔记,该书是数据挖掘领域的经典之作,想了解更多内容请参阅原著。一、频繁模式基本概念        模式:通常指的是数据中的一种规律、趋势或特征,可以是单一的特征、属性,也可以是多个特征之间的关系或组合;      ......
  • RocketMq详解:一、RocketMQ 介绍及基本概念
    文章目录前言1.RocketMQ简介2.RocketMQ特点3.核心特性4.应用场景5.RocketMQ优势6.RocketMQ四大核心组件6.1NameServer1.NameServer作用2.NameServer被设计为无状态的原因3.和NameServer和Zookeeper的区别4.NameServer的高可用保障6.2Broker1.Broker部署方式2.高可用与负......
  • 1网络安全的基本概念
    文章目录网络安全的基本概念可以总结为以下几个方面:网络安全的需求:信息安全的重要性:信息安全是计算机、通信、物理、数学等领域的交叉学科,对于社会的发展至关重要。信息安全的目标:主要包括保密性、完整性、可用性和合法使用。信息安全的需求来源:包括政府、商业......
  • 源码包和 RPM 包是两种常见的 Linux 软件包形式,它们各有特点和适用场景。下面是这两种
    概念源码包:定义:源码包包含了软件的源代码,用户需要自己下载源码包,然后进行编译和安装。优点:用户可以根据自己的需求定制编译选项,选择安装哪些功能模块,还可以查看和修改源代码。缺点:安装过程较为复杂,需要一定的技术知识,而且安装速度相对较慢。RPM包:定义:RPM(RedHatPackageManager)是......
  • RocketMQ QandA
    RocKetMQ消费消息是推送还是拉取在RocketMQ中,消息的消费可以是推送(Push)模式,也可以是拉取(Pull)模式。拉取模式(Pull):消费者主动去Broker端拉取消息。消费端会定期或按需拉取消息,根据自己的消费速度进行控制。这种模式下,消费者可以控制自己什么时候拉取消息以及拉取的速率,更适合......
  • git(一)——基本概念+使用教程+基本命令+以及和gitee关联
    首先来了解一下gitGit是一种分布式版本控制系统,用于跟踪和管理代码的变化。它由林纳斯·托瓦兹(LinusTorvalds)于2005年为了管理Linux内核的开发而开发。Git因其高效、灵活和易于学习的特点,迅速成为软件开发中最受欢迎的版本控制系统之一.Git的主要特点:1. **分布式**: ......
  • 【理论篇】数据挖掘 第六章 挖掘频繁模式、关联和相关性:基本概念和方法(下)
    说明:文章为《数据挖掘:概念与技术原书第03版》的学习笔记,该书是数据挖掘领域的经典之作,想了解更多内容请参阅原著。首先祝大家中秋快乐,本文章接上篇【理论篇】数据挖掘第六章挖掘频繁模式、关联和相关性:基本概念和方法(上)思考:满足最小支持度和最小置信度的模式一定是有趣......