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

56 阅读2分钟

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

一、本堂课重点内容:

  • 消息队列-Kafka
  • 消息队列-BMQ
  • 消息队列-RocketMQ

二、详细知识点介绍:

消息队列是什么

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

  • 解耦
  • 削峰
  • 异步
  • 日志处理

消息队列的前世今生

  • TIB 诞生于1985年,服务于金融机构和新闻机构

  • IBM MQ/Websphere 诞生于市1993年,业消息队列平台市场主 要玩家

  • MSMQ 微软发布于1997年

  • JMS 诞生于2001年本质上是一套Java API

  • AMQP/RabbitMQ规范发布于2004年,同年RabbitMO面市

  • Kafka于2010年由Linked开源

  • 2011年阿里中间件团队自研RocketMQ

  • Pulsar在2012年诞生于Yahoo内部

消息队列-Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色

基本概念

  • Topic: 逻辑队列,不同 Topic 可以建立不同的 Topic
  • Cluster: 物理集群,每个集群中可以建立多个不同的 Topic
  • Producer: 生产者,负责将业务消息发送到 Topic 中
  • Consumer: 消费者,负责消费 Topic 中的消息Consumer
  • Group: 消费者组,不同组 Consumer 消费进度互不干涉
  • Offset : 消息在 partition 内的相对位置信息,可以理解为唯一ID,在 partition 内部严格递增。
  • 每个分片有多个 Replica,Leader Replica 将会从 ISR 中选出。

一条消息从生产到消费是如何处理的,Producer端逻辑、Broker端逻辑、Consumer端逻辑

  • Producer:批量发送、数据压缩
  • Broker:顺序写,消息索引,零拷贝
  • Consumer:Rebalance

消息队列-BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

  • BMQ 的架构模型(解决 Kafka 存在的问题)
  • BMQ 读写流程 (Failover 机制,写入状态机)
  • BMQ 高级特性(泳道、Databus、Mirror、Index、 Parquet)

消息队列-RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广

  • RocketMQ 的基本概念(Queue,Tag)

  • RocketMQ 的底层原理(架构模型、存储模型)

  • RocketMQ 的高级特性 (事务消息,重试和死信队列,延迟队列)