消息队列 | 青训营笔记
这是我参与「第三届青训营 -后端场」笔记创作活动的第 3 篇笔记
由于消息队列内容太多,这篇笔记起目录的作用,细节内容还需一个个具体查阅。
Kafka
- 使用场景:业务日志、用户行为数据、Metrics数据
架构:需要了解 Producer端逻辑、Broker端逻辑、Consumer端逻辑
如何帮助 Kafka 提高吞吐或稳定性?
- Producer:批量发送,数据压缩
- Broker:顺序写,消息索引,零拷贝
- Consumer:Rebalance
BMQ
Kafka 在使用中通常会遇到什么问题?
- 运维成本高
- 对于负载不均衡的场景, 解决方案复杂
- 没有缓存, 完全依赖 Page Cache
- Controller 和 Coordinator 和 Broker 在同一个进程中, 大量 IO 会造成性能下降
架构: Producer, Proxy Cluster, Broker Cluster, Consumer Group, Distributed Storage System
运维对比
- 了解 HDFS (Hadoop Distributed File System) 写文件流程
Broker-Partition 状态机
保证对于任意分片在同一时刻只能在一个 Broker 上存活
Broker写文件流程
了解数据校验、Buffer、Writer Thread逻辑
- 写文件 Failover,如果 DataNode 节点挂了,或者其他原因导致写 fail,如何处理
BMQ-高级特性
什么是泳道、Databus、Mirror、Index、Parquet
RocketMQ
- 使用场景:例如,针对电商服务线,业务涉及广泛,注册、订单、库存、物流等;同时存在许多业务峰值,如秒杀、周年庆、定期优惠等
RocketMQ 基本概念
- 逻辑队列 Topic
- 消息体 Message
- 标签 Tag(Kafka没有)
- 分区 ConsumerQueue(对应Kafka:Partition)
- 生产者 Producer
- 生产者集群 ProducerGroup(Kafka没有)
- 消费者 Consumer
- 消费者集群 ConsumerGroup
- 集群控制器 Nameserver(对应Kafka:Controller)
RocketMQ 架构
RocketMQ 高级特性
了解事务场景、事务消息、延迟发送、延迟消息、处理失败、消费重试和死信队列