消息队列 | 青训营笔记

41 阅读2分钟

消息队列

背景

  1. 系统崩溃
  2. 服务能力有限
  3. 链路耗时长尾
    1. 发起订单(5ms)
    2. 库存记录-1 (100ms)
    3. 订单记录+1(100ms)
    4. 通知商家 (30s)
  4. 日志存储(日志如何处理)

解决方案

  1. 解耦 : image.png

  2. 削峰 image.png

  3. 异步:并列执行 image.png

  4. 日志处理 image.png

消息队列

什么是消息队列

消息队列(Message Queue),保存消息的一个容器,本质是一个队列,但这个队列需要支持高吞吐、高并发、高可用

消息队列对比: image.png

使用场景

  1. 搜索服务
  2. 直播服务
  3. 订单服务
  4. 支付服务
  5. 记录日志信息
  6. Metrics数据
  7. 用户行为

Kafka

如何使用

  1. 创建集群
  2. 新增Topic,设置分支数量
  3. 编写生产者逻辑
  4. 编写消费者逻辑

基本概念

image.png

  • Topic: 逻辑队列,不同Topic可以建立不同的Topic
  • Cluster: 物理集群,每个集群中可以建立多个不同的Topic,一个集群可以存储多个消息的逻辑队列,相当于一个邮局
  • Producer: 生产者,负责将业务消息发送到Topic中,生产信息的一方
  • Consumer: 消费者,负责消费Topic中的消息,接收信息的一方
  • ConsumerGroup: 消费者组,不同组Consumer消费进度互不干涉,也就是说,不同消费者消费信息的速度是不一样的

概括来说,消息队列可以比喻为一个信箱, 其中的集群(Cluster)可以比喻为一个邮局,专门用来存放多个消息队列的(一个集群放一个队列就太浪费了), 生产者相当于寄邮件的人(生产消息), 消费者则相当于收邮件的人

Consumer消息接收端

如何解决分配问题

image.png

  1. 手动分配:手动指定哪一个Consumer消费哪一个Partition,由业务来决定
    • 缺点: 容灾能力差
    • 有点: 比较快
  2. 通过Coordinator协调分配,即自动分配Partition。