走进消息队列 | 青训营笔记

84 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第15天

一、本堂课重点内容:

1.前世今生

2.消息队列-Kafka

3.消息队列-BMQ

4.消息队列- RocketMQ

二、详细知识点介绍:

1、前世今生

消息队列发展历程

image-20230227230243595
Kafka:

分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色

RocketMQ:

低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在实时场景中运用较广

Pulsar:

是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计

2、消息队列-Kafka

使用场景

image-20230227230610304

如何使用kafka

image-20230227230646302

基本概念

image-20230227230903027

Topic:逻辑队列,不同Topic可以建立不同的Topic

Cluster:物理集群,每个集群中可以建立多个不同的Topic

Producer:生产者,负责将业务消息发送到Topic中

Consumer:消费者,负责消费Topic中的消息

ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉

Offset :

消息在partition 内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。

image-20230227231038334
Replica

每个分片有多个Replica,Leader Replica将会从ISR中选出。

image-20230227231151960

数据复制

image-20230227231236411

kafka架构

image-20230227231556967

一条消息的自述

image-20230227231938149

Producer-批量发送

image-20230227232027599

Producer-数据压缩

image-20230227232112055

Broker-数据的存储

image-20230227232147579

Broker消息文件结构

image-20230227232231824

Broker-磁盘结构

移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本。

image-20230227232348019

Consumer-消息的接收端

image-20230227232435529

Consumer-Low Level

通过手动进行分配,哪一个Consumer消费哪一个 Partition完全由业务来决定。

image-20230227232522637

Consumer-High Level

image-20230227232608813

Consumer Rebalance

image-20230227232650392

Kafka-问题总结

1、运维成本高

2、对于负载不均衡的场景,解决方案复杂

3、没有自己的缓存,完全依赖Page Cache

4、Controller和Coordinator和Broker在同一进程中,大量IO会造成其性能下降

3、消息队列- BMQ

BMQ简介

兼容Kafka协议,存算分离,云原生消息队列

image-20230227232947305

运维操作对比

image-20230227233017493

HDFS 写文件流程

随机选择一定数量的DataNode进行写入

image-20230227233110350

BMQ文件结构

image-20230227233201723

Broker-Partition状态机

image-20230227233229425

Proxy

image-20230227233301830

BMQ-高级特性

image-20230227233339295

泳道消息

image-20230227233415359 image-20230227233444247 image-20230227233519865 image-20230227233534004

Databus

image-20230227233616438 image-20230227233628939

image-20230227233647263

1.简化消息队列客户端复杂度
2.解耦业务与Topic
3.缓解集群压力,提高吞吐

Index

image-20230227233737999

如果希望通过写入的Logld、Userld 或者其他的业务字段进行消息的查询,应该怎么做?

image-20230227233811364

直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query服务读出数据。

Parquet

Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop 生态圈中大多数计算框架(Hadoop、Spark等),被多种查询引擎支持(Hive、lmpala、Drill等)。

image-20230227233919429

直接在BMQ中将数据结构化,通过 Parquet Engine,可以使用不同的方式构建Parquet格式文件。

4、消息队列- RocketMQ

使用场景

例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等

RocketMQ基本概念

image-20230227234051558 image-20230227234107015

RocketMQ架构

image-20230227234136156

存储模型

image-20230227234203483

RocketMQ-高级特性

image-20230227234309749 image-20230227234329470

高级特性-延迟发送

image-20230227234415365 image-20230227234429921

高级特性-处理失败

image-20230227234541057

5、总结

前世今生:

消自万小A-_s267

Kafka:

基本概念、架构设计、底层原理、架构缺点

BMQ:

架构设计、底层原理、Kafka 比较、高级特性

RocketMQ:

架构设计、底层原理、高级特性

三、课后个人总结:

此次课学习了RocketMQ的起源,了解了RocketMQ之前的kafka和BMQ的产生和使用及存在的缺点。收益颇多。