这是我参与「第五届青训营 」伴学笔记创作活动的第14天。
课程目录
围绕着 kafka使用场景,业务日志、用户行为数据、Metrics 数据展开,介绍一条消息从生产到消费的处理流程。
基于 Kafka 在使用中遇到问题,引出 BMQ 架构,讲解 BMQ 各模块在实际应用中如何工作以及 BMQ 多机房容灾相关知识点。
讲解 RocketMQ 的使用场景,同时将 RocketMQ 和 Kafka 进行对比,剖析其特征,同时也将带来字节内部一些最佳实践的场景,包括数据展示等等。
一、消息队列的前世今生
- 系统崩溃
- 解决方案:解耦
- 行为记录给到消息队列,存储服务从消息队列中拉取
- 服务处理能力有限
- 解决方案:削峰
- 发起订单给到消息队列,从消息队列中处理请求
- 链路耗时长尾
- 解决方案:异步
- 下单后放入消息队列返回成功,后续处理异步化
- 日志如何处理
- Log -> 消息队列 -> LogStash -> ES -> Kibana
什么是消息队列?本质是一个队列容器,支持高吞吐、高并发、高可用
二、消息队列-Kafka
- 使用场景
搜索服务、直播服务、订单服务、支付服务
- 如何使用
创建集群 -> 新增Topic -> 编写生产者逻辑 -> 编写消费者逻辑
- 基本概念
- Topic:逻辑队列
- 内部有不同的Partition
- Offset:消息在Partition内部相对位置,严格递增,可理解为唯一ID
- 每个Partition有多个Replica,Leader Replica将会从ISR(In-Sync Replica)中选出
- 保证高可用
- Cluster:物理集群,每个集群可以建立多个不同的Topic
- broker组成集群
- broker:controller:集群分配大脑
- Producer:业务信息发送到Topic
- Consumer:消费Topic中的消息
- ConsumerGroup:不同组中的Consumer消费进度不干涉
- 吞吐和稳定性
- Producer:批量发送、数据压缩
- Broker:顺序写、消息索引、零拷贝
- Consumer:Rebalance
- 问题
- 运维成本高
- 负载不均衡
- 没有自己的缓存
三、消息队列-BMQ
兼容Kafka协议,存算分离,云原生消息队列
听懵了,未完待续吧。。