RocketMQ(—)——————角色介绍(单体--集群)

 

单体:

 producer:

- 消息的生产者

通过集群中的其中一个节点(随机选择)建立长连接,获得Topic的路由信息,包括Topic下面有哪些Queue,这些Queue分布在哪些Broker上等

生产者发送业务中产生的消息到broker,rocketMQ提供了多种发送方式:同步,异步,单程。

接下来向提供Topic服务的Master建立长连接,且定时向Master发送心跳

生产者组Producer Group

注意:考虑到生产者有很强的消息发送能力,每个生产者组只允许有一个实例用来避免不必要的初始化

 

consumer

- 消息的消费者

通过NameServer集群获得Topic的路由信息,连接到对应的Broker上消费消息。

消费者从broker拉取消息给应用使用。在用户应用方面,提供了两种类型的消费者。

拉取型PullConsumer

拉取型主动从broker拉取信息,一次拉取一批,用于消费应用进行消费

推送型PushConsumer

推送型是另一种思路,它封装了消息的拉取和消费进程和其他的内部工作细节,只提供一个在消息到达时的回调接口。

注意点1:由于Master和Slave都可以读取消息,因此Consumer会与Master和Slave都建立连接。

消费者组Consumer Group

与先前提到的生产者组类似,相同的消费者角色组织到一起起名为消费者组。

消费者组是一个棒的概念,它实现了负载平衡和容错的目标,在信息消费方面,非常简单

注意点2:消费者是消费者组中的一个实例,必须订阅相同的主题topic

 

broker:

Broker面向producer和consumer接受和发送消息

通过提供轻量级主题和队列机制来处理消息存储。它们支持Push和Pull模型,

向nameserver提交自己的信息

是消息中间件的消息存储、转发服务器。

每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报。

 

nameserver:

底层由netty实现,提供了路由管理、服务注册、服务发现的功能,是一个无状态节点

为生产者和消费者客户端提供一致的主题查找列表。

nameserver是服务发现者,集群中各个角色(producer、broker、consumer等)都需要定时想nameserver上报自己的状态,

以便互相发现彼此,超时不上报的话,nameserver会把它从列表中剔除

nameserver可以部署多个,当多个nameserver存在的时候,其他角色同时向他们上报信息,以保证高可用,

NameServer集群间互不通信,没有主备的概念

nameserver内存式存储,nameserver中的broker、topic等信息默认不会持久化

 

详细说明:


NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能

Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;

路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。

然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费

NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,

所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息

,Producer,Consumer仍然可以动态感知Broker的路由的信息

NameServer实例时间互不通信,这本身也是其设计亮点之一,

即允许不同NameServer之间数据不同步(像Zookeeper那样保证各节点数据强一致性会带来额外的性能消耗)

 

主题 topic:

逻辑上的一个概念,实际上 消息( Message )是在每个Broker上以Queue的形式记录。

主题是生产者传递消息和消费者拉动消息的类别。topic与生产者与消费者之间是松耦合的。

特别强调,一个主题可以有零个一个或者多个生产者向它发送消息。相反,一个生产者可以向多个不同的主题发送消息。

从消费者角度讲,一个主题可以被零个或者一个或者多个消费者组订阅,同样的一个消费者组可以订阅一个或多个主题,

只要这个消费者组保持一致的订阅即可。

 

 

集群:


生产者集群

-Producer Cluster

produce支持分布式部署,分布式的produce通过broker集群提供的各种负载均衡策略将消息发送到broker集群中。

发送过程支持快速失败是低延迟的。


消费者集群

-Consumer Cluster

消费者也支持在推送和者拉取模式下分布式部署,它还支持集群消费和消息广播。

提供实时的消息订阅机制,能够满足大多数消费者的需求。


broker集群:

Broker高可用,可以配成Master/Slave结构,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave。

一个Master可以对应多个Slave,但是一个Slave只能对应一个Master

Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义BrokerId为0表示Master,非0表示Slave

Master多机负载,可以部署多个broker

每个Broker与nameserver集群中的所有节点建立长连接,定时注册Topic信息到所有nameserver。

包含容错机制(2个副本或3个副本),提供了极强的峰值处理里能力和按照时间顺序存储数以百万记的消息存储能力,

此外,代理提供了灾难恢复、丰富的度量统计和警报机制,这些都是在传统的消息传递系统中缺乏的

 

posted @ 2021-03-30 17:13  Li&Fan  阅读(176)  评论(0编辑  收藏  举报