消息队列 | 青训营笔记

21 阅读2分钟

1. 走进消息队列

1.1 几个案例

案例一:系统崩溃
解决方案:削峰
消息队列1.png
案例二:服务能力有限
解决方案:解耦
消息队列2.png

案例三:链路耗时长尾
解决方案:异步
链路耗时长尾.png

1.2 消息队列发展历程

消息发展.png

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架构

ka架构.png

3. 消息队列-BMQ

3.1 简介

兼容 Kafka 协议,存算分离,云原生消息队列

3.2 BMQ架构

BMQ架构.png

3.3 运维操作对比

  • Kafka
    • 需要数据复制,分钟级重启
    • 需要数据复制,分钟级替换,甚至天级别
    • 需要数据复制分钟级扩容,甚至天级别
    • 需要数据复制,分钟级缩容,甚至天级别
  • BMQ
    • 重启后可直接对外服务,秒级完成
    • 替换后可直接对外服务,秒级完成
    • 扩容后可直接对外服务,秒级完成
    • 缩容后可直接对外服务,秒级完成

3.4 Broker-Partition 状态机

BP状态机.png 保证对于任意分片在同一时刻只能在一个Broker上存活

3.5 泳道消息

开发-BOE-PPE-Prod

  • BOE: Bytedance Offline Environment,是一套完全独立的线下机房环境
  • PPE: Product Preview Environment,即产品预览环境

3.6 Databus

直接使用原生 SDK 会有什么问题?

  • 客户端配置较为复杂
  • 不支持动态配置,更改配置需要停掉服务
  • 对于 latency 不是很敏感的业务,batch 效果不佳