消息队列 | 青训营笔记

104 阅读2分钟

这是我参与「第三届青训营-后端场」笔记创作活动的第5篇笔记

消息队列的基本概念

消息队列(Message Queue)是现代的微服务架构中的重要中间件

  • 定义:消息队列在逻辑上就是一个满足先入先出的队列容器,但又同时满足高吞吐、高可用和高并发。

  • 主要使用场景:

    • 应用解耦:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;

    • 异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;

    • 限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;

    • 日志存储:分布式系统的数据流通过消息队列建立日志。

Kafka消息队列

Kafka是目前主流的消息队列之一,提供分布式、分区的、多副本的日志提交服务,在高吞吐的场景下出色,由Apache基金会开源维护。

  • Kafka的基本概念

    • Topic:逻辑队列,不同的业务可以建立不同的Topic
    • Partition:一个Topic可以包含一个或多个Partition
    • Cluster:物理集群,可以部署一个或多个Topic
    • Broker:Cluster中的物理结点
    • Producer:生产者,将消息发送到Topic中
    • Consumer:消费者,负责消费Topic中的消息
    • ConsumerGroup:消费者组,不同组的Consumer的消费进度互不干涉
  • Kafka的数据容灾

    • Kafka为每个topic的在多个服务器中的partitions复制日志。这允许在集群中的一个服务器失败时进行自动的故障切换(failover),从而消息不会由于失败而丢失。
    • 复制(replication)的基本单位是partition,包含若干个replica,分为leader和follower。
    • 每个partition都有一个leader和零个或多个follower。
    • leader中配置的复制因子(replication factor)决定了复制的数量。
    • producer生产的数据都会被发送到leader,而consumer的读操作可以从leader或follower中读取。
    • follower就像consumer一样,从leader中消费由producer生产的数据,并且将它们应用到自己的日志(log)中。
    • 每个follower的日志与leader的日志是相同的,具有相同的偏移和相同顺序的消息。
    • 但leader的日志末尾可能有少量的消息尚未来得及被复制到follower。