消息队列介绍 | 青训营笔记

58 阅读2分钟

消息队列介绍

1. 消息队列原理

  • 一个保存消息的容器,本质是一个队列,支持高吞吐高并发,并且高可用

2. Kafka

image-20230519172856438.png

1. 如何使用Kafka

  1. 创建集群
  2. 新增Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

2. 基本概念

image-20230519173127716.png

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

1. Offset

  • 消息在partition内的相对位置信息,在partition内严格递增【消息在partition中的位置ID】

2. Replica

  • 每一个partition有多个Replica(副本),Leader Replica将会从ISR(In-Sync Replica)取出

    如果Leader副本出现宕机,可以在ISR中重新选出一个Leader -> 高可用

image-20230519174120244.png

3. Kafka架构

image-20230519174501770.png

  • Broker:缓存代理,Kafka集群中的一台或多台服务器统称broker.(用于数据存储)

4. Producer

  • 可以通过将消息进行批量发送(Batch)减少IO次数,加强发送能力
  • 可以通过压缩,减少消息大小(解决因消息过大导致带宽不足无法发送)

5. Broker

image-20230519175245968.png

将Log(日志)进行切分成LogSegment

  • 顺序写,消息索引,零拷贝 -> 提高吞吐量或者稳定性

6. Consumer

  • Rebalance

3. BMQ

  • 泳道

    实质上是两个topic

    解决主干泳道流量的隔离问题以及泳道资源重复创建的问题

  • Databus

    1. 简化消息队列客户端复杂度
    2. 解耦业务和Topic
    3. 缓解集群压力,提供吞吐

4. RocketMQ

  • 高级特性
    1. 事务
    2. 延迟消息
    3. 处理失败(消费重试【未超过重试次数的消息放在RetryTopic,Consumer可以获取到再进行重试】和死信队列【超过重试次数之后的消息存放在ScheduleTopic,无法进行重试但是人工可以介入查看失败信息】)