消息队列BMQ | 青训营

191 阅读2分钟

BMQ简介

1.BMQ兼容Kafka协议,存算分离,云原生消息队列,解决了Kafka的很多问题。 2.BMQ新增了Proxy层作为代理; 3.Coordinator 和 Controller 可以独立部署; 4底层新增 HDFS 用于存算分离。

BMQ架构图

1692622374531.png 基本链路是: Producer -> Consumer -> Proxy -> Broker -> HDFS -> Controller -> Coordinator -> Meta

运维操作对比

具体操作KafkaBMQ
重启需要数据复制,分钟级重启重启后可直接对外服务,秒级完成
替换需要数据复制,分钟级替换,甚至天级别替换后可直接对外服务,秒级完成
扩容需要数据复制,分钟级扩容,甚至天级别扩容后可直接对外服务,秒级完成
缩容需要数据复制,分钟级缩容,甚至天级别扩容后可直接对外服务,秒级完成

通过对比可以知道,BMQ会比Kafka速度快很多,所有节点变更的操作,都仅仅只是集群元数据的变化,通常情况下都能秒级完成,而真正的数据已移到下层分布式文件存储去了,所以运维操作不需要额外关心数据复制带来的时间成本。

HDFS写文件流程

通过前面的介绍,我们知道了,同一个副本是由多个segment组成,我们来看看BMQ对于单个文件写入的机制是怎么样的,首先客户端写入前会选择一定数量的DataNode,这个数量是副本数,然后将一个文件写入到这三个节点上,切换到下一个segment之后,又会重新选择三个节点进行写入。这样一来,对于单个副本的所有segment来讲,会随机的分配到分布式文件系统的整个集群中。

1692623380575.png

文件结构

对于Kafka分片数据的写入,是通过现在Leader节点上写好文件,然后同步到Follower上,所以对于同一个副本的所有Segment都在同一台机器上面。就会存在之前我们所说到的单分片过大导致负载不均衡的问题,但在BMQ集群中,因为对于单个副本来说,是随机到不同的节点上面的,因此不会存在Kafka的负载不均问题。

1692623488426.png

参考资料
  1. 字节内部课:消息队列前世今生 - 掘金 (juejin.cn)
  2. 字节内部课:消息队列-Kafka - 掘金 (juejin.cn)
  3. 字节内部课:消息队列- BMQ - 掘金 (juejin.cn)
  4. 字节内部课:消息队列- RocketMQ - 掘金 (juejin.cn)