这是我参与「第五届青训营 」伴学笔记创作活动的第 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 的高级特性 (事务消息,重试和死信队列,延迟队列)