BMQ
BMQ是一个兼容Kafka协议的云原生消息队列,它具有存算分离的特点,提供了高效、可靠的消息传递服务。以下是对BMQ相关内容的详细解释:
架构特点
- 分布式存储系统:底层使用如HDFS这样的分布式存储系统,保证了数据的可靠性和可扩展性。
- Meta Storage System:类似于ZooKeeper的角色,负责元数据的管理和协调。
- 读写优化:去除了数据复制的过程,提高了读写效率。
- 运维操作:秒级完成运维操作,提升了系统运维的效率。
HDFS写文件流程
- 随机选择DataNode:在写入数据时,随机选择一定数量的DataNode进行写入,保证了数据的分布性和冗余性。
Broker-Partition状态机
- 状态机管理:确保任意分片在同一时刻只能在一个Broker上存活,避免了数据一致性问题。
Broker-写文件流程
- 数据校验:确保写入数据的正确性。
- Buffer:配置写入Buffer以实现高吞吐量。
- Writer Thread(异步):
- 写入数据 Write Data
- 刷新缓冲区 Flush
- 构建索引 Build Index
- 检查点(保证数据一致性) Checkpoint
- 创建新的段文件 Roll new segment file
- PS:配置写入Buffer保证高吞吐量,但是不能保证高可靠性(可能会写之前宕机导致Buffer上的数据丢失)
Broker-写文件 Failover
- 故障转移:在写入失败时,找到另一个节点继续写入,保证了服务的可用性。
Proxy
- FetchRequest:接收读取请求。
- Wait:等待数据准备就绪。
- 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
- 副本范围更大
存储模型
存储位置索引
高级特性
- 事务消息:两阶段提交
- 延迟发送
- 消费重试和死信队列