消息队列学习记录(下)| 豆包MarsCode AI刷题

114 阅读3分钟

BMQ

BMQ是一个兼容Kafka协议的云原生消息队列,它具有存算分离的特点,提供了高效、可靠的消息传递服务。以下是对BMQ相关内容的详细解释:

架构特点

  • 分布式存储系统:底层使用如HDFS这样的分布式存储系统,保证了数据的可靠性和可扩展性。
  • Meta Storage System:类似于ZooKeeper的角色,负责元数据的管理和协调。
  • 读写优化:去除了数据复制的过程,提高了读写效率。
  • 运维操作:秒级完成运维操作,提升了系统运维的效率。

HDFS写文件流程

  • 随机选择DataNode:在写入数据时,随机选择一定数量的DataNode进行写入,保证了数据的分布性和冗余性。

Broker-Partition状态机

  • 状态机管理:确保任意分片在同一时刻只能在一个Broker上存活,避免了数据一致性问题。

Broker-写文件流程

  1. 数据校验:确保写入数据的正确性。
  2. Buffer:配置写入Buffer以实现高吞吐量。
  3. Writer Thread(异步)
    • 写入数据 Write Data
    • 刷新缓冲区 Flush
    • 构建索引 Build Index
    • 检查点(保证数据一致性) Checkpoint
    • 创建新的段文件 Roll new segment file
    • PS:配置写入Buffer保证高吞吐量,但是不能保证高可靠性(可能会写之前宕机导致Buffer上的数据丢失)

Broker-写文件 Failover

  • 故障转移:在写入失败时,找到另一个节点继续写入,保证了服务的可用性。

Proxy

  1. FetchRequest:接收读取请求。
  2. Wait:等待数据准备就绪。
  3. Cache
    • 命中(HIT):直接返回数据。
    • 未命中(MISS):从磁盘上查找读取数据。

多机房部署

  • 分布式部署:每个机房部署Broker和Proxy,确保数据在多个机房之间的高可用性和低延迟访问。每个机房部署Broker(集合为一个topic)、Proxy(每个有所有Partiton)。

BMQ高级特性

泳道消息

  • 开发流程:开发->BOE->PPE->Prod(BOE测试、PPE验证)。
  • 泳道:解决流量隔离和泳道重复创建的问题。

Databus

  • 简化配置:减少配置和代码量,解耦业务与Topic。
  • 提高吞吐:通过Databus Agent缓解集群压力,提高系统吞吐量。

Mirror

  • 跨Region读写:通过Mirror实现跨Region的数据最终一致性。

Index

  • 数据查询:通过配置索引DDL,异步构建索引,提供高效的数据查询服务。

Parquet

  • 列式存储格式:使用Parquet这种新型列式存储格式,经过优化,适用于结构化数据的存储和查询。

RocketMQ

使用场景

  • 低延时场景,实施业务如电商,峰值业务如秒杀等。
  • 比起Kafka多了一个Tag,为了在Topic下面进一步区分。
  • 分区命名不同(ConsumerQueue),目的相同
  • 支持Producer Group,支持事务消息

架构特点

  • 引入NameServer,告诉Queue在哪个Broker
  • 副本范围更大

存储模型

存储位置索引

高级特性

  • 事务消息:两阶段提交
  • 延迟发送
  • 消费重试和死信队列