一、RocketMQ各组件介绍

NameServer

NameServer作为RocketMQ的注册中心,类似于kafka中的Zookeeper角色。

维护着broker的基本信息、topic和broker之间的路由信息。

Producer连接NameServer,发送信息时由NameServer分配将消息发送到哪个Broker上。

NameServer高可用

NameServer之间不进行消息的传输,Broker会将自己的基本信息发送给所有的NameServer。
因此一个NameServer会保存完整的Broker信息,当NameServer挂掉之后,只要还有NameServer,Producer和Consumer扔然可以发送和消费消息

Broker

broker是用来RocketMQ主要工作组件,包含以下功能:

  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的消息进行索引服务,以提供消息的快速查询。

broker有两种角色:master和slave

Master

Master提供消息的读写服务,实现消息的落盘操作。

Slave

Slave提供消息的读服务,主要是将master中的消息进行备份。

Producer

生产消息的模块,根据RocketMQ的分配策略,将消息投递到合适的broker中

主要的消息投递方式:

  • 同步发送:消息发送后,等待broker返回发送结果
  • **异步发送:**消息发送后,立即返回,但是当broker接收到消息后会回调方法
  • **单向发送:**只发送,没有后续操作

Consumer

消费broker消息的模块,支持push和poll模式对消息进行消费

  • **poll:**消费者主要向broker请求消息
  • **push:**broker向消费者推送消息

订阅关系

Tag

Tag可以认为是一个二级分类,Topic是一个一级分类

例:topic是商品。tag是手机、衣服…

Topic下多个tag

消费者组

消费者必须归属于一个消费者组,消费者主要与topic中的队列绑定消费关系。

在一个消费者组中一个消费者可以消费多个队列,但是一个队列只对应一个消费者

消费者组中消费者的订阅关系最好一致,否则会产生丢失消息的现象

丢失消息的现象说明
在这里插入图片描述

其问题的核心关键是,同一个tag会分布在不同的队列中,但消费者C1分配到的队列为q0,q1,q0,q1中有taga和tagb的消息,

但tagb的消息会被消费者C1过滤,但这部分消息却不会被C2消费,造成了消息丢失。

消费方式

  • 根据tag的类别进行消费消息
  • 使用SQL92过滤:按照SQL语法对消息属性进行过滤匹配。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默默行路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值