消息队列 | 青训营笔记

65 阅读2分钟

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

一、本堂课重点内容:

  1. 消息队列的前世今生
  2. 消息队列-Kafka
  3. 消息队列-BMQ
  4. 消息队列-RocketMQ
  5. 最佳实践

二、详细知识点介绍:

2.1 消息队列

场景

如何解决系统崩溃、服务处理能力有限、链路耗时长尾、日志如何处理等场景

  • 解耦 image.png
  • 削峰 image.png
  • 异步 image.png
  • 日志处理 image.png

消息队列是什么

定义:消息队列MQ,指保存消息的一个容器,本质是队列,支持高吞吐、高并发、高可用

image.png

消息队列的前世今生

image.png

2.2 消息队列-Kafka

  • kafka使用场景

    • 业务日志、用户行为数据、Metrics数据
  • 基本概念

    • Topic 逻辑队列
      • 内部Offset: 消息在partition内的相对位置信息,可以认为是唯一ID,在partition内严格递增
    • Cluster 物理集群
    • Producer 生产者,发送消息至topic
    • Consumer 消费者
    • Partition : Topic中,可以有多个Replica,Leader Replica将会从ISR中选出
    • 数据复制 image.png
    • 架构 image.png
  • 一条消息从生产到消费是如何处理的

    • Producer端逻辑
      • 批量发送:减少IO次数
      • 数据压缩:减少消息大小
    • Broker端逻辑
      • 消息文件结构:image.png
      • 磁盘结构——>顺序写
      • 偏移量索引文件:二分找到小于目标offset的最大索引位置
      • 零拷贝——数据拷贝直接在内核空间进行
    • Consumer端逻辑
      • 消息分配:选定Broker为Coordinator进行自动分配 Rebalance
  • 缺点

    • 运维成本高
    • 数据复制问题:替换,扩容,缩容时
    • 负债不均衡,解决方案复杂
    • 没有缓存,依赖Page Cache
    • Controller 、 Coordinator 和Broker在同一进程,大量IO会导致性能下降

2.3 消息队列-BMQ

  • 兼容Kafka协议, 存算分离, 云原生消息队列

  • BMQ架构 image.png

    • 读写分离, Proxy、Broker无状态 image.png
  • BMQ各模块是如何工作的

    • Broker
      • 写文件流程 image.png
    • Proxy
      • 读取 image.png
    • HDFS
    • MetaStorage
  • BMQ多机房容灾

    • image.png

2.4 消息队列-RocketMQ

  • RocketMQ使用场景,针对电商业务线等低延时场景

  • RocketMQ和Kafka对比:

    • image.png
  • RocketMQ架构介绍

    • image.png

课后

  1. 消息队列的应用场景有哪些?

  2. Kafka的哪些Feature让其可以支撑大吞吐写入的场景?

  3. Kafka Consumer Rebalance的流程简述?

  4. BMQ相比较Kafka有哪些优势?

  5. RocketMQ有哪些特有的Feature?

  6. RocketMQ事务消息处理流程简述?

  7. 你认为MQ后面应该如何发展?(开放题)