这是我参与「第五届青训营」伴学笔记创作活动的第11天
前言
今天的内容是实际业务中为了缓解业务请求量过大,缓解实际服务的压力而采用的一种手段——消息队列。
什么是消息队列
消息队列是一个支持高吞吐、高并发、高可用的,能够保存消息的一个用队列实现的容器
常见的消息队列
- kafka
- rocketMQ
- Pulsar
- BMQ
kafka
使用
- 创建集群
- 在集群中创建topic,设置好分片数量
- 引入SDK,配置参数,初始化生产者
- 初始化消费者
概念
- topic 逻辑队列
- cluster 物理集群
- producer 生产者,将消息发送至topic
- consumer 消费者,消费topic中的消息
- partition 分片
- offset 相对位置
- replica 副本
- ISR 同步中的副本
数据复制
架构
性能提升
- producer
- 批量发送
- 数据压缩
- broker
- 顺序写
- 消息索引
- 零拷贝
- consumer
- rebalance
存在的问题
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller和Coordinator和broker在同一进程中,大量IO会造成其性能下降
BMQ
简介
BMQ是一种兼容Kafka协议,存算分离、云原生的消息队列
架构
文件写入机制
- 客户端随机选择若干个dataNode,将文件写入到这三个节点上
- 切换到下一个segment上
- 重复1,2 对于单个副本的所有的segment来说,会随机的分配到分布式文件系统的整个集群中。
代理机制
使用代理机制可以减少请求的IO次数。在等待结束后,会先从缓存中查找数据。如果缓存中没有才会从存储中查找。
多机房部署
对于一个高可用的服务来说,要防止单机故障所带来的意外影响,也要防止机房故障带来的影响。
总结
学完课程后,让我对消息队列有了更加清晰和深刻的理解。拓宽了我的知识面。