消息队列 | 青训营笔记

74 阅读2分钟

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

什么是消息队列:

消息队列(MQ),是保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐,高并发,并且高可用。

Kafka:

  • 使用场景:

搜索服务,直播服务,订单服务,支付服务,用户行为

  • 如何使用:
  1. 创建集群
  2. 新增Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑
  • 能够帮助Kafka提高吞吐量或者稳定性的功能:

Producer:批量发送、数据压缩

Broker: 顺序写,消息索引,零拷贝

Consumer: Rebalance

  • 架构缺点:
  1. 运维成本高
  2. 对于负载不均衡的场景,解决方案复杂
  3. 没有自己的缓存,完全依赖Page Cache
  4. Controller 和 Coordinator和Broker在同一进程中,大量IO会造成其性能下降
  • 基础架构:

image.png

BMQ

  • BMQ简介: 兼容Kafka协议,存算分离,云原生消息队列。

  • 基础架构:

image.png

  • 与Kafka的对比

image.png

  • BMQ的读写流程: Failover机制,写入状态机

  • BMQ高级特性:

  1. 泳道开发流程: 开发---BOE---PPE---Prod

BOE:是一套完全独立的线下机房环境。多个人同时测试,需要等待上一个人测试完成后再进行。

PPE:产品预览环境。对于PPE消费者来说,资源没有生产环境多,所以无法承受生产环境的流量。

  1. Databus: 简化消息队列客户端复杂度 解耦业务与topic 环节集群压力,提高吞吐

  2. Mirror: 使用Mirror通过最终一致的方式,解决跨Region读写问题

  3. Index: 直接在BMQ中将数据结构化。配置索引DDL,异步构建索引后,通过Index Query服务读出数据

  4. Parquet: 是Hadoop生态圈中一种新型列式存储格式,可以兼容Hadoop生态圈中大多数框架,被多种查询引擎支持。 直接在BMQ中将数据结构化,通过Parquet Engine,可以使用不同的方式构建Parquet格式文件。

RocketMQ

  • 使用场景:

针对电商业务线,如注册、订单等。同时也会涉及许多业务峰值时刻,如秒杀活动,周年庆,定期特惠。

  • 基本概念:

image.png

  • 底层原理:

架构模型

image.png

存储模型

image.png

  • 高级特性:

    • 事物消息

    • 重试

    • 死信队列

    • 延迟队列