『字节青训营-3rd』L16:走进消息队列
引子
四个案例








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

解决方案





前世今生
发展历程

业界对比

消息队列-Kafka
使用场景

如何使用 Kafka

基本概念

Offset

每个消息都有编号
Replica

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

由 Controller 分配复制
Kafka 架构

一条消息的自述

思考

不能一个一个发,应该要一起发送
Producer
批量发送

数据压缩

最好的是 ZSTD
Broker
数据的存储

消息文件结构

磁盘结构

顺序写

如何找到消息

偏移量索引文件


时间戳索引文件

传统数据拷贝

零拷贝

Consumer
消息的接收端

Low Level 手动分配

优点:方便快捷
问题:
- 如果某个 Consumer 挂掉了,那它负责的那些 Partition 直接阻塞
- 如果某个 Consumer 能力不够,想其他 Consumer 来接替,必会出现机器的启停
High Level 自动分配

Consumer Rebalance

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

下面是一些缺点
数据复制问题

重启操作

(重启一个节点要很久,重启所有节点要数天甚是数周)
不能并发重启,可能一个片放在两个机器上
替换、扩容、缩容

(只要有节点的变动,就有复制的成本)
负载不均衡


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

消息队列-BMQ
BMQ 简介


读写分离
运维操作对比

HDFS 写文件流程

BMQ 文件结构

同一个节点会打散到很多机器当中
Broker
Partition 状态机

(听得有点迷)
写文件流程

(有点迷)
写文件 Failover

Proxy

多机房部署

BMQ 的高级特性

泳道消息





Databus


Mirror


Index


Parquet




消息队列- RocketMQ

RocketMQ 基本概念


RocketMQ 架构

存储模型

高级特性
事务场景


延迟发送


重试和死信队列

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


评论
GiscusTwikoo