这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
课程主要学习了消息队列相关的知识:
1. 消息队列的诞生
2. Kafka
3. BMQ
4. RoketMQ
注:笔记图片来自课程截图,如有侵权,请联系删除
1.消息队列的诞生
面对客户端请求过多时,服务处理能力有限,怎样处理庞大的请求量; 处理客户请求的时候怎样减少链路耗时长尾使得服务器快速响应请求; 系统崩溃时怎么回复数据,怎么处理日志。
面对上述的情景,可以利用消息队列进行系统解耦、削峰、异步还有日志处理。 消息队列是保存消息的一个容器,本质是一个高吞吐,高并发并且高可用的队列。
消息队列对比:
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业各场景,逐渐替换掉对应的Kafka集群
2.Kafka
使用Kafka
- 第一步,首先需要创建一个Kafka集群
- 第二步:需要在这个集群中创建—个Topic,并且设置好分片数量
- 第三步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去 -第四步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World
基本概念:
- Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中
- Cluster: Kafka的物理集群,每个集群中可以新建多个不同的topic
- Producer:顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中
- Consumer:消息的消费端,负责消费已经发送到topic中的消息
- Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐
帮助Kafka提高吞吐或者稳定性的功能:Producer:批量发送、数据压缩;Broker:顺序写,消息索引,零拷贝;Consumer: Rebalance
3.BMQ
架构图:
BMQ读写流程(Failover 机制,写入状态机)、BMQ高级特性(泳道、Databus、Mirror、Index、Parquet)
4.RocketMQ
架构图:
高并发并且逐渐取代Kafka因为其底层原理(架构模型、存储模型)、RocketMQ的高级特性(事务消息、重试和死信队列,延迟队列。