消息队列| 青训营笔记

128 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

消息队列

什么是消息队列

消息队列(MQ),指保存消息的一个容器,本质是个队列,但这个队列呢,需要支持高吞吐,高井发,并且高可用。

Kafka

使用场景

  • 日志信息
  • Metrics 数据
  • 用户行为

如何使用 Kafka

创建集群 -> 新增 Topic -> 编写生产者逻辑 -> 编写消费者逻辑

基本概念

  • Topic:逻辑队列,不同 Topic 可以建立不同的 Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的 Topic
  • Producer:生产者,负责将业务消息发送到 Topic 中
  • Consumer:消费者,负责消费 Topic 中的消息
  • ConsumerGroup:消费者组,不同组 Consumer 消费进度互不干涉
  • partition:Topic 内部的分区
  • Offset:消息在 partition 内的相对位置信息,可以理解为唯一 ID,在 partition 内部严格递增。
  • ISR(In-Sync Replicas):与 Leader Replica 差距过大的 Follower Replica 会被踢出 ISR
  • Replica:每个分片有多个 Replica,Leader Replica 将会从 ISR 中选出。

数据复制

Kafka 架构

ZooKeeper:负责存储集群元信息,包括分区分配信息等

Producer-数据压缩

通过压缩,减少消息大小,目前支持 Snappy、Gzip、LZ4、ZSTD 压缩算法

Broker-数据的存储

Consumer一消息的接收端

总结

  • Producer:批量发送、数据压缩
  • Broker:顺序写,消息索引,零拷贝
  • Consumer:Rebalance

BMQ

BMQ文件结构

Broker - Partition 状态机

Broker - 写文件流程

Proxy

多机房部署

BMQ - 高级特性

泳道消息

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

Databus

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

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

  • 简化消息队列客户端复杂度
  • 解耦业务与Topic
  • 缓解集群压力,提高吞吐

Mirror

Index

Parquet

RocketMQ

RocketMQ 基本概念

RocketMQ 架构

存储模型

RocketMQ - 高级特性

事务场景

延迟发送

延迟消息

处理失败

消费重试和死信队列