RocketMQ中的角色分类

1.nameserver

可以做集群,提供轻量级的服务发现与路由。每个nameserver记录完整的路由信息,提供等效的读写服务并支持快速存储扩展。

就是一个注册中心,存储当前集群所有broker的信息、Topic和broker的对应关系。

nameserver用于存储topic、broker关系信息,功能简单、稳定性高。多个nameserver之间没有通信,单台nameserver宕机不影响其他nameserver和集群。即使所有的nameserver宕机,已建立连接的producer、consumer、broker仍然可以正常工作,但新起的producer、consumer、broker就无法正常工作。

nameserver的工作压力不会太大,平时主要的开销就是维持心跳和提供topic-broker的关系数据。有一点需要注意的是,broker向nameserver发送心跳的时候会携带自己所有的topic信息,如果过多的话,会导致一次心跳当中数据传输失败,导致心跳失败。

2.producer

消息的生产者,拥有同一个topic的producer组成一个集群。

producer和nameserver集群中的一个节点(随机选择)建立长连接,定期从nameserver获取topic路由信息。并向提供topic服务的broker的master建立长连接,然后定时向master发送心跳。

producer完全无状态,可以集群部署。

producer group用来表示一个发送消息应用,一个producer group下包含多个producer实例,可以是一台机器也可以是多个进程,或者说是一个进程的多个producer对象。一个producer group可以发送多个topic消息,一个producer group的作用如下:

  • 标识一类producer
  • 可以通过运维工组查询这个发送消息应用下有多少producer实例
  • 发送分布式事务消息时,如果一个producer实例意外宕机,broker会主动回调同一个group中的任意一个producer来确认事务的状态。

3.consumer

消费者,简单来说消费MQ上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,还是直接存储到数据库取决于业务需求,拥由相同consumer group的consumer组成一个集群。

consumer和nameserver集群中的一个节点(随机选择)建立长连接,定期从nameserver获取topic路由信息,并向提供topic的master、slave建立长连接,并定时向master、slave发送心跳。consumer既可以从master订阅信息也可以从slave订阅信息,订阅规则由broker制定。

一个consumer group下的多个consumer以均摊的方式(也就是集群模式)消费消息,如果设置为广播模式,那么这个group内的各个实例都消费全量数据。

4.broker

提供轻量级的topic机制和queue机制来处理消息存储,同时支持推(push)拉(pull)结合的模式以及主从结构的容错模式。

broker集群最核心的模块:负责topic的存储、管理、分发功能。

单个broker和所有的nameserver保持心跳连接,间隔为30秒,请求中包括当前broker的所有topic信息。nameserver会反查broker的心跳信息,如果一个broker在2分钟内都没有心跳,则认为该broker下线,调整topic和broker的对应关系。但此时nameserver不会主动通知producer和consumer有broker宕机。

broker集群部署相对复杂,分为master和slave,一个master对应多个slave,但一个slave只能对应一个master,其对应关系可以通过制定相同的brokerName和不同的brokerId来定义,id为0代表master、非0代表slave。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值