这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天。
01. 前世今生
02. 消息队列-Kafka
2.1 使用场景
搜索服务、直播服务、订单服务、支付服务
日志信息、Metrics数据、用户行为
2.2 如何使用Kafka
创建集群-新增Topic-编写生产者逻辑-编写消费者逻辑
2.3 基本概念
Topic:逻辑队列
Cluster:物理集群
Producer:生产者
Consumer:消费者
ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
Partition:Topic分区,消息可以并发处理
Offset:消息在Partition内的相对位置信息,严格递增
每个Partition有多个Replica,Leader Replica将会从ISR(In-Sync Replicas)中选出。
2.4 数据复制
Producer-Broker-Consumer
2.5 Kafka架构
2.6 一条消息的自述
为什么Kafka能支持高吞吐?
2.7 Producer-批量发送
Batch批量发送可以减少IO次数,从而增强发送能力
带宽?
通过压缩,减少消息大小
2.8 Broker-数据的存储
Broker消息文件结构
Broker磁盘结构
顺序写减少寻道时间
如何找到消息
Consumer通过发送FetchRequest请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer。
传统数据拷贝
零拷贝
2.9 Consumer-消息的接收端
Low Level
High Level
2.10 Consumer Rebalance
Producer:批量发送、数据压缩
Broker:顺序写、消息索引、零拷贝
Consumer:Rebalance
2.11 Kafka-数据复制问题
2.12 Kafka-重启操作
2.13 Kafka-替换、扩容、缩容
2.14 Kafka-负载不均衡
Kafka问题:
- 运维成本高
- 对负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller和Broker和Coordinator在同一进程中,大量IO会造成性能下降
03. 消息队列-BMQ
3.1 BMQ简介
兼容Kafka协议,村算分离,云原生消息队列
3.2 运维操作对比
3.3 HDFS写文件流程
3.4 BMQ文件接口
3.5-Broker-Partition状态机
保证对于任意分片在同一时刻只能在一个Broker上存活
写文件流程
写文件Failover
3.6 Proxy
3.7 多机房部署
3.8 高级特性
3.9 泳道消息
开发流程:开发——BOE——PRE-Prod
BOE:Bytedance Offline Environment,是一套完全独立的线下机房环境
PRE:Product Preview Environment,即产品预览环境
3.10 Databus
- 简化消息队列客户端复杂度
- 解耦业务与Topic
- 缓解集群压力,提高吞吐
3.11 Mirror
使用Mirror通过最终一致的方式,解决跨Region读写问题。
3.12 Index
Query By: 1. Offset 2. Timestamp
直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query服务读出数据。
3.14 Parquet
04. RocketMQ
使用场景:电商业务线