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

70 阅读2分钟

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

1. 本节课重点内容

  • 消息队列的前世今生
  • 消息队列-Kafka
  • 消息对列-BMQ
  • 消息队列-RocketMQ

2. 消息队列的前世今生

2.1 消息队列的发展历程

图片.png

2.2 业界消息队列对比

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

3. Kafka

3.1 使用场景

  • 日志信息
  • Metrics数据
  • 用户行为

3.2 如何使用Kafka

图片.png

3.3 基本概念

图片.png

  • Topic: 逻辑队列, 不同Topic可以建立不同的Topic
  • Cluster: 物理集群,每个集群中可以建立多个不同的Topic
  • Producer: 生产者,负责将业务消息发送到Topic中
  • Consumer: 消费者,负责消费Topic中的消息
  • ConsumerGroup: 消费者组,不同组Consumer 消费进度互不干涉

3.3.1 Topic内部- Offset

  • Offset: 消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增

图片.png

3.3.2 Replica

每个分片有多个Replica, Leader Replica将会从ISR中选出

图片.png

3.4 数据复制

图片.png

3.5 Kafka 架构

图片.png

3.6 一条消息的自述

图片.png

3.7 Producer-批量发送

图片.png

3.8 Broker 消息文件结构

图片.png

3.9 Kafka-问题总结

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

4. BMQ

4.1 简介

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

4.1.1 架构图

图片.png

4.2 运维操作对比

图片.png

4.3 HDFS写文件流程

图片.png

4.4 Broker 写文件流程

图片.png

4.5 Proxy

图片.png

4.6 Databus

  1. 简化消息队列客户端复杂度
  2. 解耦业务与Topic
  3. 缓解集群压力,提高吞吐

5. RocketMQ

5.1 使用场景

  • 针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等
  • 涉及许多业务的峰值时刻,如秒杀活动、周年庆、定期特惠

5.2 基本概念

图片.png

5.3 RocketMQ架构

图片.png

5.4 事物场景

图片.png