消息队列原理与实战 | 青训营笔记

57 阅读2分钟

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

如何解决以下场景问题

  1. 系统崩溃
  2. 服务处理能力有限
  3. 链路耗时长尾
  4. 日志如何处理

案例一解决方案:解耦

image.png

案例二解决方案:削峰

image.png

方案三解决方案:异步

image.png

image.png

什么是消息队列

消息队列(MQ),指保存消息的一个容器,本质是个队列,同时支持高吞吐,高并发,且高可用。

image.png

业界主流消息队列

  • kafka:分布式的、分区的、多副本的、日志提交服务,在高吞吐场景下发挥出色
  • RocketMQ:低延迟、强一致、高性能、万亿级容量和灵活的扩展性,在一些实时场景中运用广泛
  • Plusar:下一代 云原生分布式消息流平台,集消息、存储、轻量化函数计算为一体、采用存算分离的架构设计
  • BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换对应的Kafka集群

Kafaka

如何使用Kafka

  1. 首先需要创建一个Kafka集群,但如果你是在字节工作,恭喜你这一步消息团队的小伙伴已经帮 你完成了
  2. 需要在这个集群中创建一个Topic, 并且设置好分片数量
  3. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者 ,调用Send方法,将你的Hello World发送出去
  4. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者 ,调用Poll方法,你将收到你刚刚发送的Hello World

基本概念

  • Topic: Kakfa中的逻辑队列,可以理解成每一个不同的业务场景 就是一个不同的topic, 对于这个业务来说,所有的数据都存储在这个topic中
  • Cluster: Kafka的物理集群,每个集群中可以新建多个不同的topic
  • Producer:顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中
  • Consumer:消息的消费端,负责消费已经发送到topic中的消息
  • Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐

image.png

  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID, 在partition内部严格递增。
  • Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出

image.png

2.4 数据复制

image.png

2.5 Kafka架构

image.png

2.6 批量发送 数据压缩 数据存储