消息队列与原理 | 青训营笔记

61 阅读3分钟

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

一. 重点内容

  • 消息队列的发展

  • 消息队列 - Kafka

  • 消息队列 - BMQ

  • 消息队列 - RocketMQ

二. 知识点介绍

1. 消息队列的历史

image.png

  • 业界消息队列对比
    • kafka:分布式、分区、多副本的日志提交服务,适合高吞吐场景
    • RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的扩展性,适合实时场景
    • pulsar:下一代云原生分布式消息流平台,集信息、存储、轻量化函数式为一体、采用存算分离的架构设计
    • BMQ:存算分离,初步定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

2. 消息队列 - Kafka

  • 使用场景:搜索服务、直播服务、订单服务、支付服务、日志信息、用户行为、Metrics数据
  • 基本概念
    • Topic:逻辑队列
    • Cluster:物理集群,每个集群可以建立多个不同的Topic
    • Producer:生产者,负责将业务消息发送到Topic中
    • Consumer:消费者,负责消费Topic中的消息
    • ConsumerGroup:消费者组。不同组Consumer消费进度互不干涉 image.png
    • Offset:消费在partition内的相对位置信息,相当于唯一ID,在partition内部严格递增
    • Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出 image.png
  • 数据复制image.png
  • 架构image.png
  • Producer
    • 批量发送:减少I/O次数,加强发送能力
    • 数据压缩:减少消息大小,目前支持Snappy、Gzip、LZ4、ZSTD压缩算法
  • Broker
    • 消息文件结构: image.png
    • 磁盘结构:移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本
    • 顺序写:提高写入效率
    • 偏移量索引文件:二分找到小于目标offset的最大文件
    • 时间戳索引文件:二分找到小于目标时间戳最大的索引位置,再通过寻找offset的方式找到最终数据
  • Consumer
    • 消息接收端: image.png
    • Low Level:通过手动进行分配,哪一个Consumer消费哪一个partition完全由业务决定 image.png
    • High Level:Rebalance image.png
  • Kafka重启操作:关闭重启 -> Leader切换,追赶数据 -> 数据同步完成 -> Leader回切
  • Kafka替换、扩容、缩容及负载不均衡
    • 缺点:运维成本高;对于负载不均衡的场景,解决方案复杂;没有自己的缓存,完全依赖Page Cache;Controller和Coordinator和Broker在同一进程中,大量I/O会造成性能下降

3. 消息队列 - RocketMQ

  • 简介:兼容Kafka协议,存算分离,云原生消息对列
  • 架构image.png
  • 运维操作对比-Kafka vs BMQimage.png
  • HDFS写文件流程:随机选择一定数量的DataNode进行写入 image.png
  • Broker-Partition状态机:保证对于任意分片在同一时刻只能在一个Broker上存活 image.png
  • Broker写文件流程image.png
  • Proxyimage.png
  • Databus
    • 简化消息队列客户端复杂度
    • 解耦业务与Topic
    • 缓解集群压力,提高吞吐 image.png
  • Index:直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query服务读出数据
  • Parquet:Apache Parquet是Hadoop生态圈中一种新型列式存储结构,可以兼容Hadoop生态圈的大多数计算框架,如Hadoop、Spark,被多种查询引擎支持,如Hive、Drill等

4. 消息队列 - RocketMQ

  • 使用场景:注册、订单、库存、物流、秒杀活动等
  • 基本概念image.png
  • 架构image.png
  • 事务场景:最终一致性 image.png
  • 事务消息image.png
  • 延迟发送image.png
  • 延迟消息image.png
  • 消费重试和死信队列image.png