队列消息 | 青训营

95 阅读4分钟

队列消息的发展历程

消息队列(Message Queues)作为一种通信模式和工具,经历了多个阶段的发展和演进,涵盖了从传统中间件到大数据处理的多个领域。

  1. 早期通信模式: 在计算机系统早期,通信主要通过共享内存和直接方法实现。这种方式适用于较小的系统,但在分布式系统中存在挑战。
  2. 第一代中间件: 在20世纪80年代末和90年代初,第一代消息传递中间件出现了。IBM的MQSeries(现在的IBM MQ)是其中一个早期的例子,它引入了点对点通信模式,并允许应用程序在分布式环境中进行异步通信。
  3. CORBA 和 JMS: 通用对象请求代理体系结构(CORBA)是一个面向对象的分布式通信框架,支持异步消息传递。Java消息服务(JMS)标准化了Java平台上的消息通信,使得应用程序能够与消息中间件进行交互。
  4. AMQP 和第二代中间件: 高级消息队列协议(AMQP)作为一个开放标准出现,使不同消息中间件之间的互操作性成为可能。同时,第二代消息中间件如RabbitMQ和Apache ActiveMQ在开源领域崭露头角,提供了更强大的消息传递功能,包括消息持久化、发布/订阅等。
  5. Kafka 的崛起: Apache Kafka在2011年推出,引入了一种全新的消息处理范式,即日志(Log)型消息队列。它专注于处理大规模实时数据流,具有高吞吐量、持久性和水平扩展性,使得流数据处理变得更加简单。
  6. 微服务和容器化: 随着微服务架构的兴起,消息队列在解耦合微服务之间的通信中发挥了关键作用。容器化技术如Docker的普及也为消息队列的部署和管理提供了更大的灵活性。
  7. 云原生和托管服务: 云原生运动推动了容器和微服务的更深入融合,许多云服务提供商开始提供托管的消息队列服务,如Amazon SQS、Google Cloud Pub/Sub等,使得构建和管理消息队列变得更加简单。
  8. 流处理和大数据: 随着大数据和流处理的兴起,消息队列也在这些领域发挥着重要作用。例如,Kafka Streams允许开发者使用Kafka来构建实时流处理应用程序。

屏幕截图 2023-08-22 200539.png

消息队列——kafka

Apache Kafka 是一个开源的流式平台,设计用于处理大规模的实时数据流。它以高吞吐量、持久性和可扩展性为特点,适用于构建实时数据流处理应用、日志聚合、事件处理等场景。以下是关于 Kafka 的一些重要信息:

核心概念和组件:

  1. Broker: Kafka 集群由多个 Broker 组成,每个 Broker 是一个独立的 Kafka 服务器,负责存储和处理数据。
  2. Topic: 消息在 Kafka 中以 Topic 进行分类,每个 Topic 是一个逻辑上的消息通道。
  3. Partition: 每个 Topic 可以被分成多个 Partition,每个 Partition 是数据的逻辑单元,实现了数据的水平分布和并行处理。
  4. Producer: 生产者将消息发布到 Kafka 的 Topic 中,可以指定消息的键(Key),这有助于将消息路由到特定的 Partition。
  5. Consumer: 消费者从 Topic 中订阅消息,并可以以不同的消费组(Consumer Group)进行分组。每个消费组中的消费者协调消费分区。
  6. Consumer Group: 多个消费者可以组成一个消费组,共同消费一个 Topic 中的消息。每个分区只能被消费组中的一个消费者消费。
  7. Offset: Offset 是消息在分区中的唯一标识,消费者可以跟踪自己已经消费的消息位置。

特点和用途:

  • 高吞吐量: Kafka 可以处理数以千计的消息和事件,具有很高的写入和读取吞吐量。
  • 持久性: 消息被持久化在磁盘上,即使消费者处理完消息,消息仍然会保存一段时间。
  • 分布式: Kafka 的分布式特性使其能够轻松扩展,适用于处理大规模数据流。
  • 流处理: Kafka 可以与流处理框架集成,如 Kafka Streams、Apache Flink 和 Apache Spark,用于实时处理和分析数据。
  • 日志聚合: Kafka 常用于日志聚合和存储,如日志收集、监控和审计。
  • 事件源: Kafka 可以用作事件源,用于捕获和传输实时事件,如用户行为、传感器数据等。

应用场景:

  • 实时数据处理和分析
  • 日志聚合和监控
  • 实时报警和通知
  • 事件驱动架构
  • 前端和后端的解耦
  • 流式处理和大数据应用

屏幕截图 2023-08-22 213336.png