RocketMQ 理论知识笔记

概念

message(消息):物理载体,是最小单位,message必须属于一个topic(主题),每个message都带有唯一表示message id,且能够通过 messageid或者key查询

topic(主题):存储一类型的消息集合,包含多条消息,一条消息只能属于一个topic

tag(标签):用于区分同一主题下不同类型的消息,统一业务单元的消息,可以根据不同的业务目的在同一主题下设置不同标签

name server:topic路由注册中心,用于管理broker的集群,并且提供心跳检测

producer group(生产者组):同一类product的集合,它们发送同一类型的消息,且逻辑一致

consumer group(消费者组):同一类consumer的集合,消费同一类消息,且逻辑一致

普通顺序消费(normal ordered message):消费者通过同一个消费队列收到的消息是有顺序的,不同的消息顺序可能是无序的

严格顺序消费(strictly ordered message):消费者收到的消息都是有序的

广播消费(broadcasting):相同consumer group下的每个consumer实例都接受全量的消息

集群消息(clustering):相同consumer group下的consumer都平摊接受并消费消息

特性

订阅与发布:消息的生产者向某个topic发送消息;当订阅了这个topic或tag的消费者就会接收到这条消息并且进行消费

消息顺序:当一类消息消费时,能够按照发送的顺序来消费。
消费顺序类型:
1.全局顺序:对于某个topic,所有的消息按照严格的先入先出顺序,适用场景:性能要求不高,所有消息按照严格的FIFO原则进行消息发布和消费的场景

2.分区顺序:对于指定的topic,所有消息根据sharding key进行区块分区,对一个分区内的消息严格按照FIFO顺序进行发布和消费

消息过滤:通过tag标签进行消息过滤,也能够自定义属性过滤。会对broker增加负担,但是减少了对consumer无用消息的网络传输

消息可靠性:当出现单点故障时,数据无法恢复,但是能够通过异步复制,以保证99%的消息不丢失

至少一次:每个消息必须投递一次。consumer先pull消息到本地,消费完成后,会向服务器返回ack,如果消息没有被消费不一定返回ack

回溯消费:consumer消费成功的消息可以根据业务需求重新消费

事务消息:本地事务和发送消息的操作可以被定义到全局事务中,要么同时成功,要么同时失败

定时消息:消息发送到broker后,不会被立即被消费,等待特定的时间后投递消息到topic

消息重试:consumer消息消费失败之后,令消息重新消费一次

消息重投:生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway没有任何保证。

流量控制:当broker处理能力达到瓶颈的时候,可以对消费者或生产者进行限流

死信队列:当一条消息消费失败,重试多次后,如果消费依然失败,则会投递到特殊队列中

架构设计

在这里插入图片描述

producer:发布消息的角色,支持分布式集群方式部署。producer通过mq的负载均衡模块选择相应的broker集群队列进行消息投递

consumer:消息消费的角色,支持分布式集群方式部署。支持push推,pull拉两种模式对消息进行消费,也支持集群方式和广播方式消费,提供实时的消息订阅机制

nameServer:topic路由注册中兴,支持broker的发现与注册,同时会向broker发送心跳包以检测broker的状态

brokerServer:主要负责消息的存储、投递和查询以及服务高可用保证,它拥有以下子模块:
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的消息进行索引服务,以提供消息的快速查询。

网络特点
1.nameServer是一个无状态的节点,能够集群部署,节点之前无任何信息同步。

2.broker分为master与slave,对于master是多对一关系,对slave是一对一关系,master可以对应多个slave,但是slave只能对应一个master

3.producer与nameService集群中的一个节点建立长连接,定期从nameServer中的topic获取路由信息,并向提供topic服务的master建立长连接,且定期发送心跳

4.consumer与nameServer集群中的一个节点建立长连接,定期从nameServer获取topic路由信息,并向topic服务的master、slave建立长连接,且定时向master、slave发送心跳。consumer可以从master订阅消息,也可以从slave订阅消息,消费者在向Master拉取消息时,Master服务器会根据拉取偏移量与最大偏移量的距离(判断是否读老消息,产生读I/O),以及从服务器是否可读等因素建议下一次是从Master还是Slave拉取。

启动流程
1.启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。

2.Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。

3.收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。

4.Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。

5.Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值