后端与 Go| 青训营笔记

967 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天。

消息队列之BMQ

BMQ的架构模型解决了Kafka存在的问题,读写流程是Failover机制及写入状态机,高级特性有泳道、Databus、Mirror、Index、Parquet等。 BMQ兼容Kafka协议,存算分离,云原生消息队列。

运维操作对比:
重启:Kafka需要数据复制,分钟级重启,BMQ重启后可直接对外服务,秒级完成。
替换:Kafka需要数据复制,分钟级替换,甚至天级别,BMQ替换后可直接对外服务,秒级完成。
扩容:Kafka需要数据复制,分钟级扩容,甚至天级别,BMQ扩容后可直接对外服务,秒级完成。
缩容:Kafka需要数据复制,分钟级缩容,甚至天级别,BMQ缩容后可直接对外服务,秒级完成。

HDFS写文件流程:随机选择一定数量的DataNode进行写入。

Broker-Partition状态机保证对于任意分片在同一时刻只能在一个Broker上存活。

泳道消息:开发流程为开发、BOE、PPE、Prod,其中BOE:Bytedance Offline Environment,是一套完全独立的线下机房环境;PPE:Product Preview Environment,即产品预览环境。泳道消息解决主干泳道流量隔离问题以及泳道资源重复创建问题。

直接使用原生SDK可能会导致客户端配置较为复杂,不支持动态配置,更改配置需要停掉服务,对于lalency不是很敏感的业务,batch效果不佳等问题。因此使用DataBus可以简化消息队列客户端复杂度,解耦业务与Topic,缓解集群压力,提高吞吐。

使用Mirror通过最终一致的方式,解决跨区域读写问题。

Index:如果希望通过写入的Logld、Userld 或者其他的业务字段进行消息的查询,可以直接在BMQ 中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query 服务读出数据。

Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架(Hadoop、Spark等),被多种查询引擎支持(Hive、Impala、Drill等)。直接在BMQ中将数据结构化,通过 Parquet Engine,可以使用不同的方式构建Parquet格式文件。

引用参考:

消息队列- BMQ - 掘金 (juejin.cn)

总结

本文接上文,是青训营学习中关于消息队列的学习笔记,本文主要是BMQ的有关笔记。