消息队列(上) | 青训营笔记

66 阅读2分钟

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

课程概要

  • 消息队列的前世今生
  • 消息队列-Kafka
  • 消息队列-BMQ
  • 消息队列-RocketMQ
  • 最佳实践

问题场景与解决方案

  • 系统崩溃
  • 服务处理能力有限
  • 链路耗时长尾
  • 日志如何处理

解耦

image.png

解耦后,消息队列在主存储服务崩溃后可以切换副存储

削峰

image.png

在服务处理能力有限的情况下,通过削峰来限制出口量,达到限流的效果

异步

image.png

由于单链路下耗时太长了,为了减少耗时,使用异步方案可以将几件事情分开单独处理

日志处理

image.png

消息队列定义

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

业界消息队列对比

image.png

消息队列-Kafka

Kafka的特性

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
  • 可扩展性:kafka集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  • 高并发:支持数千个客户端同时读写

基本概念

image.png

  • Topic: 逻辑队列,不同 Topic 可以建立不同的 Topic
  • Cluster: 物理集群,每个集群中可以建立多个不同的 Topic
  • Producer: 生产者,负责将业务消息发送到 Topic 中
  • Consumer: 消费者,负责消费 Topic 中的消息
  • ConsumerGroup: 消费者组,不同组 Consumer 消费进度互不干涉

帮助提高Kafka提高吞吐或稳定性的功能:

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