1. 走进消息队列
1.1 几个案例
案例一:系统崩溃
解决方案:削峰
案例二:服务能力有限
解决方案:解耦
案例三:链路耗时长尾
解决方案:异步
1.2 消息队列发展历程
1.3 业界消息队列的对比
- Kafka: 分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ: 低延迟强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较厂
- Pulsar: 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体.采用存算分离的架构设计
- BMQ: 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群
2. 消息队列-Kafka
2.1 使用场景
搜索服务 直播服务 订单服务 支付服务
2.2 如何使用
创建集群-新增Topic-编写生产者逻辑-编写消费者逻辑
- topic:逻辑队列,不同的topic可以建立不同的topic
- Cluster:物理集群,每个集群中可以建立多个不同的topic
- Producer:生产者,负责将业务消息发送到Topic中
- Consumer:消费者,负责消费Topic中的消息
- ConsumerGroup:消费者组,不同组Consumer消费进度互不干扰
2.3 基本概念-Replica
每个分片有多个 Replica,Leader Replica 将会从 ISR 中选出
2.4 数据复制
2.5 Kafka架构
3. 消息队列-BMQ
3.1 简介
兼容 Kafka 协议,存算分离,云原生消息队列
3.2 BMQ架构
3.3 运维操作对比
- Kafka
- 需要数据复制,分钟级重启
- 需要数据复制,分钟级替换,甚至天级别
- 需要数据复制分钟级扩容,甚至天级别
- 需要数据复制,分钟级缩容,甚至天级别
- BMQ
- 重启后可直接对外服务,秒级完成
- 替换后可直接对外服务,秒级完成
- 扩容后可直接对外服务,秒级完成
- 缩容后可直接对外服务,秒级完成
3.4 Broker-Partition 状态机
保证对于任意分片在同一时刻只能在一个Broker上存活
3.5 泳道消息
开发-BOE-PPE-Prod
- BOE: Bytedance Offline Environment,是一套完全独立的线下机房环境
- PPE: Product Preview Environment,即产品预览环境
3.6 Databus
直接使用原生 SDK 会有什么问题?
- 客户端配置较为复杂
- 不支持动态配置,更改配置需要停掉服务
- 对于 latency 不是很敏感的业务,batch 效果不佳