消息队列 | 青训营笔记

52 阅读2分钟

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

前言

今天的内容是实际业务中为了缓解业务请求量过大,缓解实际服务的压力而采用的一种手段——消息队列。

什么是消息队列

消息队列是一个支持高吞吐、高并发、高可用的,能够保存消息的一个用队列实现的容器

常见的消息队列

  • kafka
  • rocketMQ
  • Pulsar
  • BMQ

kafka

使用

  1. 创建集群
  2. 在集群中创建topic,设置好分片数量
  3. 引入SDK,配置参数,初始化生产者
  4. 初始化消费者

概念

  • topic 逻辑队列
  • cluster 物理集群
  • producer 生产者,将消息发送至topic
  • consumer 消费者,消费topic中的消息
  • partition 分片
    • offset 相对位置
    • replica 副本
    • ISR 同步中的副本

数据复制

image.png

架构

image.png

性能提升

  • producer
    • 批量发送
    • 数据压缩
  • broker
    • 顺序写
    • 消息索引
    • 零拷贝
  • consumer
    • rebalance

存在的问题

  • 运维成本高
  • 对于负载不均衡的场景,解决方案复杂
  • 没有自己的缓存,完全依赖Page Cache
  • Controller和Coordinator和broker在同一进程中,大量IO会造成其性能下降

BMQ

简介

BMQ是一种兼容Kafka协议,存算分离、云原生的消息队列

架构

image.png

文件写入机制

  1. 客户端随机选择若干个dataNode,将文件写入到这三个节点上
  2. 切换到下一个segment上
  3. 重复1,2 对于单个副本的所有的segment来说,会随机的分配到分布式文件系统的整个集群中。

代理机制

使用代理机制可以减少请求的IO次数。在等待结束后,会先从缓存中查找数据。如果缓存中没有才会从存储中查找。

多机房部署

对于一个高可用的服务来说,要防止单机故障所带来的意外影响,也要防止机房故障带来的影响。

总结

学完课程后,让我对消息队列有了更加清晰和深刻的理解。拓宽了我的知识面。