这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
一、本堂课重点内容
- 消息队列
二、详细知识点介绍
1.消息队列简介
什么是消息队列:指保存消息的一个容器,本质是一个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用。
业界消息队列对比:
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广。
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为为一体、采用存算分离的架构设计。
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。
2.Kafka
使用场景:搜索服务、直播服务、订单服务、支付服务、日志服务、Metrics数据、用户行为。
通过创建集群到新增Topic到编写生成者逻辑到编写消费者逻辑。
- Topic:逻辑队列
- Cluster:物理集群
- Producer:生产者
- Consumer:消费者
- consumerGroup:消费者组,不同组Consumer消费互不干涉
基本概念:
- Offset:消息在partition内的相对位置,可以理解为唯一ID,在partition内部严格递增
- Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出
Kafka架构:ZooKeeper:负责存储集群元信息,包括分区分配信息等。
Kafka能支持高吞吐:Producer的批量发送、数据压缩,Broker的磁盘结构、顺序写、偏移量索引文件、传统数据拷贝、零拷贝,Consumer的消息接收端、Low Level、High Level、Rebalance。
一些Kafka的基本操作:数据复制问题、重启操作、替换、扩容、缩容、负载不均衡、
3.BMQ
一个兼容Kafka协议,存算分离,云原生的消息队列。 在重启操作、替换、扩容、缩容上BMQ是秒级别的。
-
Borker:
- Partiton状态机:保证任意分片在同一时刻只能在一个Broker上存活,
- 写文件流程
- 写文件Failover:如果DataNode节点挂了或者是其他原因导致我们写文件失败,应该如何处理。
-
Proxy
-
多机房部署
-
泳道消息:开发流程从开发到BOE到PPE到Prod
-
Databus:简化消息队列客户端复杂度、解耦业务于Topic、缓解集群压力、提高吞吐
直接使用云原生问题:
- 客户端配置复杂
- 不支持动态配置,更改配置需要停掉服务
- 对于latency不是很敏感的业务,batch效果不佳
-
Mirror:通过最终一致的方式,解决跨Region读写问题
-
Index:直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query服务读出数据
-
Parquet:是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算机框架(Hadoop、Spark),被多种查询引擎支持(Hive、Impala、Drill)
4.RocketMQ
使用场景:电商业务线,其业务涉及广泛,注册,订单,秒杀等。
高级特性:事务场景、事务消息、延迟发送、处理失败、消息重试和死信队列
三、课后个人总结
今天学习的是开发过程中必不可少的一环消息队列,了解到很多关于消息队列的基本概念,和消息队列的基本流程,同时对现在比较流行的消息队列Kafka、BMQ、RocketMQ有了初步认识,相信自己一定可以好好吸收,加油!