这是我参与「第五届青训营」伴学笔记创作活动的第11天
一、本堂课重点内容:
- 消息队列的前世今生
- 消息队列-Kafka
- 消息队列-BMQ
- 消息队列-RocketMQ
- 最佳实践
二、详细知识点介绍:
2.1 消息队列
场景
如何解决系统崩溃、服务处理能力有限、链路耗时长尾、日志如何处理等场景
- 解耦
- 削峰
- 异步
- 日志处理
消息队列是什么
定义:消息队列MQ,指保存消息的一个容器,本质是队列,支持高吞吐、高并发、高可用
消息队列的前世今生
2.2 消息队列-Kafka
-
kafka使用场景
- 业务日志、用户行为数据、Metrics数据
-
基本概念
- Topic 逻辑队列
- 内部Offset: 消息在partition内的相对位置信息,可以认为是唯一ID,在partition内严格递增
- Cluster 物理集群
- Producer 生产者,发送消息至topic
- Consumer 消费者
- Partition : Topic中,可以有多个Replica,Leader Replica将会从ISR中选出
- 数据复制
- 架构
- Topic 逻辑队列
-
一条消息从生产到消费是如何处理的
- Producer端逻辑
- 批量发送:减少IO次数
- 数据压缩:减少消息大小
- Broker端逻辑
- 消息文件结构:
- 磁盘结构——>顺序写
- 偏移量索引文件:二分找到小于目标offset的最大索引位置
- 零拷贝——数据拷贝直接在内核空间进行
- 消息文件结构:
- Consumer端逻辑
- 消息分配:选定Broker为Coordinator进行自动分配 Rebalance
- Producer端逻辑
-
缺点
- 运维成本高
- 数据复制问题:替换,扩容,缩容时
- 负债不均衡,解决方案复杂
- 没有缓存,依赖Page Cache
- Controller 、 Coordinator 和Broker在同一进程,大量IO会导致性能下降
2.3 消息队列-BMQ
-
兼容Kafka协议, 存算分离, 云原生消息队列
-
BMQ架构
- 读写分离, Proxy、Broker无状态
- 读写分离, Proxy、Broker无状态
-
BMQ各模块是如何工作的
- Broker
- 写文件流程
- 写文件流程
- Proxy
- 读取
- 读取
- HDFS
- MetaStorage
- Broker
-
BMQ多机房容灾
2.4 消息队列-RocketMQ
-
RocketMQ使用场景,针对电商业务线等低延时场景
-
RocketMQ和Kafka对比:
-
RocketMQ架构介绍
课后
-
消息队列的应用场景有哪些?
-
Kafka的哪些Feature让其可以支撑大吞吐写入的场景?
-
Kafka Consumer Rebalance的流程简述?
-
BMQ相比较Kafka有哪些优势?
-
RocketMQ有哪些特有的Feature?
-
RocketMQ事务消息处理流程简述?
-
你认为MQ后面应该如何发展?(开放题)