消息队列笔记 | 青训营

65 阅读4分钟

今天主要学习了消息队列,了解了消息队列的前世今生,消息队列-Kafka,消息队列-BMQ,消息队列-RocketMQ。

消息队列

消息队列是一种通信模式,用于在不同应用程序、服务或组件之间进行异步通信,以实现解耦、削峰、异步处理等目的。它是一种中间件,通过将消息存储在队列中,允许生产者将消息发送到队列中,而消费者则可以从队列中获取并处理这些消息。

解耦: 消息队列通过将消息的发送者和接收者解耦,使它们不需要直接相互通信。生产者将消息发送到队列,而消费者从队列中获取消息并进行处理,这种解耦能够使系统的不同部分独立运作,减少了彼此的依赖性。

削峰: 在高负载的情况下,消息队列可以作为缓冲区,帮助处理峰值请求。生产者可以将消息发送到队列中,然后消费者按照自身的处理能力逐渐处理这些消息,避免了系统过载。

异步: 消息队列支持异步通信,即生产者在发送消息后不需要等待消费者立即处理,而可以继续自己的工作。这种异步通信方式可以提高系统的响应性能,因为生产者不会被消费者的处理速度所限制。

日志处理: 消息队列也常用于处理日志数据。应用程序可以将日志消息发送到队列中,然后消费者(如日志处理器)可以按照需要分析和存储这些日志,而不会影响应用程序的性能。

总的来说,消息队列是一种强大的通信工具,可以用于实现解耦、削峰、异步处理和日志处理等多种场景。通过引入消息队列,系统可以更灵活地处理不同组件之间的通信和协作。

消息队列-Kafka

Kafka 是一个分布式流平台,广泛用于构建实时数据流和处理应用程序。它提供了高吞吐量、容错性和持久性的特点,适用于多种使用场景。以下是关于 Kafka 的一些核心概念和使用场景,以及消息从生产到消费的处理流程:

Kafka 使用场景: Kafka 适用于许多不同的使用场景,包括但不限于:

  1. 业务日志: 用于收集和存储应用程序和系统的日志信息,以便后续的分析、监控和故障排除。

  2. 用户行为数据: 收集用户的行为数据,如点击、浏览、交易等,以用于用户行为分析、个性化推荐等。

  3. Metrics 数据: 用于收集和存储系统和应用程序的性能指标和监控数据,以进行实时监控和分析。

基本概念: 在 Kafka 中,有一些核心概念需要理解:

  • Producer(生产者): 负责将消息发送到 Kafka 主题。
  • Cluster(集群): 由多个 Kafka Broker 组成,共同提供消息服务。
  • Consumer(消费者): 从 Kafka 主题订阅消息并进行处理。
  • Topic(主题): 消息的类别或种类,相当于消息的分类。
  • Partition(分区): 每个主题可以划分成多个分区,每个分区在物理上是一个日志文件。

数据迁移、Offset、Partition 选主:

  • 数据迁移: Kafka 允许在不中断服务的情况下对分区进行重新平衡,以便添加或删除 Broker 或者分区。
  • Offset(偏移量): 每个分区中的消息都有一个唯一的偏移量,消费者可以使用偏移量来跟踪已读取的消息。
  • Partition 选主: 在 Kafka 集群中,每个分区有一个领导者(Leader)和多个追随者(Follower),领导者负责处理读写请求。

消息从生产到消费的处理流程:

  1. Producer 端逻辑: 生产者将消息发送到 Kafka 集群的指定主题中,根据主题和分区的规则选择将消息写入哪个分区。生产者可以指定键值来控制消息的分区策略。

  2. Broker 端逻辑: 消息被写入分区后,会在 Broker 中持久化存储,这些消息被组织成日志文件。消息将在分区内有序地追加写入。

  3. Consumer 端逻辑: 消费者订阅一个或多个主题,然后从 Kafka 集群中拉取消息。消费者可以跟踪已消费的偏移量,确保不会丢失消息。

总的来说,Kafka 是一个功能强大的消息传递平台,支持多种使用场景。生产者将消息写入主题,Broker 以分区的形式存储消息,消费者订阅主题并拉取消息,从而实现高效的消息传递和处理。同时,Kafka 提供了很多工具和特性来确保消息的可靠传递、高吞吐量和数据持久性。