消息队列 | 青训营笔记

88 阅读2分钟

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

课程目录

围绕着 kafka使用场景,业务日志、用户行为数据、Metrics 数据展开,介绍一条消息从生产到消费的处理流程。

基于 Kafka 在使用中遇到问题,引出 BMQ 架构,讲解 BMQ 各模块在实际应用中如何工作以及 BMQ 多机房容灾相关知识点。

讲解 RocketMQ 的使用场景,同时将 RocketMQ 和 Kafka 进行对比,剖析其特征,同时也将带来字节内部一些最佳实践的场景,包括数据展示等等。

一、消息队列的前世今生

  • 系统崩溃
    • 解决方案:解耦
    • 行为记录给到消息队列,存储服务从消息队列中拉取
  • 服务处理能力有限
    • 解决方案:削峰
    • 发起订单给到消息队列,从消息队列中处理请求
  • 链路耗时长尾
    • 解决方案:异步
    • 下单后放入消息队列返回成功,后续处理异步化
  • 日志如何处理
    • Log -> 消息队列 -> LogStash -> ES -> Kibana

什么是消息队列?本质是一个队列容器,支持高吞吐、高并发、高可用

二、消息队列-Kafka

  1. 使用场景

搜索服务、直播服务、订单服务、支付服务

  1. 如何使用

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

  1. 基本概念
  • Topic:逻辑队列
    • 内部有不同的Partition
    • Offset:消息在Partition内部相对位置,严格递增,可理解为唯一ID
      • 每个Partition有多个Replica,Leader Replica将会从ISR(In-Sync Replica)中选出
      • 保证高可用
  • Cluster:物理集群,每个集群可以建立多个不同的Topic
    • broker组成集群
    • broker:controller:集群分配大脑
  • Producer:业务信息发送到Topic
  • Consumer:消费Topic中的消息
  • ConsumerGroup:不同组中的Consumer消费进度不干涉
  1. 吞吐和稳定性
  • Producer:批量发送、数据压缩
  • Broker:顺序写、消息索引、零拷贝
  • Consumer:Rebalance
  1. 问题
  • 运维成本高
  • 负载不均衡
  • 没有自己的缓存

三、消息队列-BMQ

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

听懵了,未完待续吧。。