『字节青训营-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