这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
什么是消息队列:
消息队列(MQ),是保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐,高并发,并且高可用。
Kafka:
- 使用场景:
搜索服务,直播服务,订单服务,支付服务,用户行为
- 如何使用:
- 创建集群
- 新增Topic
- 编写生产者逻辑
- 编写消费者逻辑
- 能够帮助Kafka提高吞吐量或者稳定性的功能:
Producer:批量发送、数据压缩
Broker: 顺序写,消息索引,零拷贝
Consumer: Rebalance
- 架构缺点:
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller 和 Coordinator和Broker在同一进程中,大量IO会造成其性能下降
- 基础架构:
BMQ
-
BMQ简介: 兼容Kafka协议,存算分离,云原生消息队列。
-
基础架构:
- 与Kafka的对比
-
BMQ的读写流程: Failover机制,写入状态机
-
BMQ高级特性:
- 泳道开发流程: 开发---BOE---PPE---Prod
BOE:是一套完全独立的线下机房环境。多个人同时测试,需要等待上一个人测试完成后再进行。
PPE:产品预览环境。对于PPE消费者来说,资源没有生产环境多,所以无法承受生产环境的流量。
-
Databus: 简化消息队列客户端复杂度 解耦业务与topic 环节集群压力,提高吞吐
-
Mirror: 使用Mirror通过最终一致的方式,解决跨Region读写问题
-
Index: 直接在BMQ中将数据结构化。配置索引DDL,异步构建索引后,通过Index Query服务读出数据
-
Parquet: 是Hadoop生态圈中一种新型列式存储格式,可以兼容Hadoop生态圈中大多数框架,被多种查询引擎支持。 直接在BMQ中将数据结构化,通过Parquet Engine,可以使用不同的方式构建Parquet格式文件。
RocketMQ
- 使用场景:
针对电商业务线,如注册、订单等。同时也会涉及许多业务峰值时刻,如秒杀活动,周年庆,定期特惠。
- 基本概念:
- 底层原理:
架构模型
存储模型
-
高级特性:
-
事物消息
-
重试
-
死信队列
-
延迟队列
-