消息队列在架构和功能层面都包含哪些概念

113 阅读4分钟

在系统架构中,消息队列的定位就是总线和管道,主要起到解耦上下游系统、数据缓存的作用。它不像数据库,会有很多计算、聚合、查询的逻辑,它的主要操作就是生产和消费。所以,我们在业务中不管是使用哪款消息队列,我们的核心操作永远是生产和消费数据。

架构层面的基本概念

image.png

  1. Broker:Broker 本质上是一个进程,比如 RocketMQ 的 Broker 就是指 RocketMQ Server 启动成功后的一个进程。在实际部署过程中,通常一个物理节点只会起一个进程,所以大部分情况下我们认为 Broker 就表示一个节点,但是在一些特殊场景下,一个物理节点中也可以起多个进程,就表示一台节点有多个 Broker。 
  2. Topic(主题):在大部分消息队列中,Topic 都是指用来组织分区关系的一个逻辑概念。通常情况下,一个 Topic 会包含多个分区。但是 RabbitMQ 是一个例外,Topic 是指具体某一种主题模式。 
  3. Partition/Queue/MessageQueue(分区 / 分片):在消息队列中,分区、分片、Partiton、Queue、MessageQueue 是一个概念,后面统一用分区来称呼,都是用来表示数据存储的最小单位。一般可以直接将消息写入到一个分区中,也可以将消息写入到 Topic,再分发到具体某个分区。一个 Topic 通常会包含一个或多个分区。
  4. Producer(生产者): 生产者指消息的发送方,即发送消息的客户端,也叫生产端。 
  5. Consumer(消费者):消费者指消息的接收方,即接收消息的客户端,也叫消费端。
  6.  ConsumerGroup/Subscription(消费分组 / 订阅):一般情况下,消息队列中消费分组和订阅是同一个概念,后面统一用消费分组来称呼。它是用来组织消费者和分区关系的逻辑概念,也有保存消费进度的作用。
  7. Message(消息):指一条真实的业务数据,消息队列的每条数据一般都叫做一条消息。 
  8. Offset/ConsumerOffset/Cursor(位点 / 消费位点 / 游标):指消费者消费分区的进度,即每个消费者都会去消费分区,为了避免重复消费进度,都会保存消费者消费分区的进度信息。
  9. ACK/OffsetCommit(确认 / 位点提交):确认和位点提交一般都是指提交消费进度的操作,即数据消费成功后,提交当前的消费位点,确保不重复消费。 
  10. Leader/Follower(领导者 / 追随者,主副本 / 从副本):Leader 和 Follower 一般是分区维度副本的概念,即集群中的分区一般会有多个副本。此时就会有主从副本的概念,一般是一个主副本配上一个或多个从副本。
  11. Segment(段 / 数据分段):段是指消息数据在底层具体存储时,分为多个文件存储时的文件,这个文件就叫做分区的数据段。即比如每超过 1G 的文件就新起一个文件来存储,这个文件就是 Segment。基本所有的消息队列都有段的概念,比如 Kakfa 的 Segment、Pulsar 的 Ledger 等等。
  12. StartOffset/EndOffset(起始位点 / 结束位点):起始位点和结束位点是分区维度的概念。即数据是顺序写入到分区的,一般从 0 的位置开始往后写,此时起始位点就是 0。因为数据有过期的概念,分区维度较早的数据会被清理。此时起始位点就会往后移,表示当前阶段最早那条有效消息的位点。结束位点是指最新的那条数据的写入位置。因为数据一直在写入分区,所以起始位点和结束位点是一直动态变化的。 
  13. ACL(访问控制技术):ACL 全称是 Access Control List,用来对集群中的资源进行权限控制,比如控制分区或 Topic 的读和写等。

此文章为11月Day2学习笔记,内容来源于极客时间《深入拆解消息队列 47 讲》