RocketMQ之Topic主题详解

Topic概念定义

  • 主题:RocketMQ中消息传输和存储的顶层容器,用于标识同类业务中逻辑的消息,可理解为消息的分类,主题消息的分类取决于业务,要发送的业务消息最好单独是一个Topic主题,以保证互相不被干扰
  • Topic主要有两大核心作用:
    1)定义数据的分类隔离:将不同业务类型的数据拆分到不同的主题中管理,通过主题实现存储的隔离性和订阅隔离性
    2)定义数据的身份和权限:RocketMQ的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限管理

模型关系

  • 在RocketMQ中主题Topic所处的流程和位置如下:
    在这里插入图片描述
  • Topic是一个逻辑概念,而非实际的消息容器
  • 每个Topic包含多个消息队列(Queue),队列是消息的实际存储单元,每个队列独立存储消息,队列数量在创建Topic时可以配置,也可后续动态调整
  • 生产者发送消息时,消息会根据一定策略分配到不同的队列中,常见的分配策略包括轮询(Round Robin)和哈希(Hashing)
  • 消费者消费时,同样是从这些队列中拉取消息

Topic属性和配置

  • Topic主要有以下内部属性可用来配置:

主题名称

  • 主题名称是在创建主题时,由开发者定义,主要用于标识主题,名称需要在集群内唯一,官方给名称命名的建议如下:
    1)Topic命名应该尽量使用简短、常用的字符,字符过长可能会导致拒绝收发消息
    2)避免使用特殊字符,特殊字符可能会出现解析异常
    在这里插入图片描述

队列列表

  • 队列既是主题的组成单元,又是消息的最小存储单元
  • 队列需要在创建主题时指定,一个主题内至少包含一个队列,消息实际存储在主题的各队列中
    队列的主要作用如下:
  • 存储顺序性:队列天然具备顺序性,消息按照进入队列的顺序进行读取,即先进先出,消息在队列中的位置和消息之间的顺序通过位点(Offset)来标记管理
  • 流式操作语义:RocketMQ基于队列的存储模型可确保消息从任意Offset读取任意数量的消息,以此实现类似聚合读取,回溯读取等特性,这些特性是RabbitMQ、ActiveMQ等非队列存储模型所不具备的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值