引子

四个案例

image-20220531205709120

image-20220531205729335

image-20220531205805499

image-20220531205819201

image-20220531205849066

image-20220531205857947

image-20220531205931609

image-20220531205937836

本地日志丢掉了,怎么办?

image-20220531210004058

解决方案

image-20220531210054490

image-20220531210126547

image-20220531210156465

image-20220531210303031

image-20220531210335730

前世今生

发展历程

image-20220531210434316

业界对比

image-20220531211121850

消息队列-Kafka

使用场景

image-20220531191521763

如何使用 Kafka

image-20220531191607884

基本概念

image-20220531191643396

Offset

image-20220531191740421

每个消息都有编号

Replica

image-20220531191804042

复制多份副本,如果 Leader 所在的机器挂了,就在 ISR 中的副本重新选一个 Leader

数据复制

image-20220531191919615

由 Controller 分配复制

Kafka 架构

image-20220531192008229

一条消息的自述

image-20220531192027072

思考

image-20220531192046420

不能一个一个发,应该要一起发送

Producer

批量发送

image-20220531192119423

数据压缩

image-20220531192144266

最好的是 ZSTD

Broker

数据的存储

image-20220531192302105

消息文件结构

image-20220531192315548

磁盘结构

image-20220531192438022

顺序写

image-20220531192520280

如何找到消息

image-20220531192557784

偏移量索引文件

image-20220531192627242

image-20220531192642328

时间戳索引文件

image-20220531192735513

传统数据拷贝

image-20220531192757345

零拷贝

image-20220531192838069

Consumer

消息的接收端

image-20220531193034477

Low Level 手动分配

image-20220531193112562

优点:方便快捷

问题:

  1. 如果某个 Consumer 挂掉了,那它负责的那些 Partition 直接阻塞
  2. 如果某个 Consumer 能力不够,想其他 Consumer 来接替,必会出现机器的启停

High Level 自动分配

image-20220531193210526

Consumer Rebalance

image-20220531193342965

(这个流程有点复杂,可以去查找更多资料学习)

image-20220531193958034


下面是一些缺点

数据复制问题

image-20220531194102108

重启操作

image-20220531194124057

(重启一个节点要很久,重启所有节点要数天甚是数周)

不能并发重启,可能一个片放在两个机器上

替换、扩容、缩容

image-20220531194313382

(只要有节点的变动,就有复制的成本)

负载不均衡

image-20220531194352353

image-20220531194401807

(想解决 IO 问题,引入了新的 IO 问题)

问题总结

image-20220531194442112

消息队列-BMQ

BMQ 简介

image-20220531205159212

image-20220531205206499

读写分离

运维操作对比

image-20220531205428375

HDFS 写文件流程

image-20220531205503584

BMQ 文件结构

image-20220531205621450

同一个节点会打散到很多机器当中

Broker

Partition 状态机

image-20220531222013714

(听得有点迷)

写文件流程

image-20220531222344184

(有点迷)

写文件 Failover

image-20220531222922382

Proxy

image-20220531223012504

多机房部署

image-20220531223305121

BMQ 的高级特性

image-20220531224959648

泳道消息

image-20220531225108853

image-20220531225150367

image-20220531225221626

image-20220531225308731

image-20220531225418485

Databus

image-20220531225604630

image-20220531225710931

Mirror

image-20220531225803184

image-20220531225857412

Index

image-20220531225945829

image-20220531230010786

Parquet

image-20220531230108198

image-20220531230146740

image-20220531230240919

image-20220531230248046

消息队列- RocketMQ

image-20220531230318188

RocketMQ 基本概念

image-20220531230342484

image-20220531230453785

RocketMQ 架构

image-20220531230510936

存储模型

image-20220531230555571

高级特性

事务场景

image-20220531230647201

image-20220531230731353

延迟发送

image-20220531230843088

image-20220531230926414

重试和死信队列

image-20220531231016360

(右下角的内容错了,应该是死信队列)

image-20220531231113397

image-20220531231125281