使用 Kafka 的流优先架构

2025年5月15日 | 阅读 7 分钟

1. 理解流式优先架构

流式优先架构是指一种旨在处理实时、连续数据流而非离散、定时批处理数据的架构。它侧重于在数据产生时捕获、处理和响应的能力,与传统的批处理系统相比具有多项优势。这些系统优先考虑即时、连续的数据处理,使企业能够利用实时洞察并及时采取行动。

流式优先架构的关键原则包括:

  • 实时处理:数据在生成或接收后立即进行处理,而不是等待计划的时间间隔。这使得系统能够更快地响应。
  • 事件驱动:在此架构中,系统中的每个重要更改(事件)都会触发操作,使其对外部条件高度敏感。
  • 服务解耦:系统不同组件通过事件异步通信。这种解耦增加了灵活性和可伸缩性,因为服务可以独立发展。

流式优先架构的关键优势

  • 更快的决策制定:通过实时处理数据,可以立即做出决策,无需等待批处理周期。
  • 降低延迟:流式优先架构最大限度地减少了事件生成与响应之间的延迟,这对于需要快速响应的应用程序至关重要,例如欺诈检测、股票交易或客户服务。
  • 可伸缩性和容错性:由于流式优先架构通常依赖于分布式系统,因此它们可以水平扩展以处理大量数据,并且通过复制数据和处理任务来提供容错能力。

2. Apache Kafka 在流式优先架构中的作用

Kafka 在流式优先架构中发挥着举足轻重的作用。Kafka 使企业能够高效、大规模地收集、处理和管理数据流。它提供了高吞吐量、低延迟、持久性和容错性等功能,使其成为流式优先系统的理想选择。

2.1 Kafka 作为中心数据中心

Kafka 在流式优先架构中

  • 实时数据流:Kafka 设计用于快速、低延迟地处理大量数据,使其成为从不同源收集实时数据的理想选择。
  • 分布式数据管理:Kafka 将数据分区到多个代理中,确保数据增长时的可伸缩性和弹性。
  • 持久性和可靠性:Kafka 通过在代理之间复制数据来确保数据持久性,即使某些代理发生故障,消费者也可以检索数据。

Java 中 Kafka 生产者代码示例

输出

Stream-First Architectures with Kafka

在此示例中

  • KafkaProducer 被配置为将温度数据发送到 temperature_readings Kafka 主题。
  • 温度读数被序列化为字符串并发送到该主题。

2.2 Kafka Streams 和 ksqlDB 用于流处理

Kafka Streams 和 ksqlDB 为基于 Kafka 的架构中的流处理奠定了基础。Kafka Streams 允许开发人员构建可以过滤、聚合、转换和连接数据流的应用程序。Kafka Streams 抽象了分布式系统的许多复杂性,使得大规模处理实时数据更加容易。

Kafka Streams:关键特性

  • 无状态和有状态处理:Kafka Streams 支持无状态操作(例如,过滤消息)和有状态操作(例如,聚合或连接)。
  • 容错性:Kafka Streams 应用程序具有容错能力,并且可以通过重放 Kafka 主题中的数据来自动从故障中恢复。
  • 与 Kafka 无缝集成:Kafka Streams 与 Kafka 紧密集成,可以轻松地将数据流式传输到 Kafka 主题和从中流出。

Kafka Streams Java 示例(温度警报)

输出

Stream-First Architectures with Kafka

在上面的代码中

  • KafkaStreams 应用程序从 temperature_readings Kafka 主题读取数据。
  • 它过滤掉温度读数大于 30.0°C 的数据。
  • 然后将过滤后的记录发送到 high_temp_alerts Kafka 主题以进行进一步处理或警报。

ksqlDB 用于流处理

ksqlDB 是一个用于流处理的类 SQL 接口,它简化了流处理查询的创建。使用 ksqlDB,用户可以使用 SQL 编写查询来过滤、聚合和转换 Kafka 流,从而更轻松地处理实时数据。

ksqlDB 流处理示例

在此示例中

  • 使用来自 Kafka 主题 temperature_readings 的数据创建了一个名为 temperature_readings 的流。
  • 创建了另一个名为 high_temp_alerts 的流来存储温度大于 30.0°C 的温度读数。
  • 这种方法利用了 ksqlDB 的类 SQL 语法,可以轻松地定义和管理流处理逻辑。

3. 使用 Kafka 构建流式优先架构的关键组件

流式优先架构由多个核心组件组成,这些组件与 Kafka 交互以处理和交换实时数据。

3.1 数据生产者

在流式优先架构中,**数据生产者**会生成消息或事件并将其发布到 Kafka 主题。这些生产者可以是各种源,例如持续发出数据的 IoT 设备、Web 应用程序或 API。Kafka 生产者将消息发送到主题,消息在被消耗之前存储在其中。

  • IoT 设备:温度传感器、湿度传感器或 GPS 设备等设备会持续发送数据。
  • Web 应用程序:用户交互(如点击、搜索或购买)被捕获为事件并发布到 Kafka 的应用程序。

Kafka 生产者 Java 代码

输出

Stream-First Architectures with Kafka

在上面的代码中

  • Kafka 生产者使用必要的属性进行配置,例如代理地址(localhost:9092)。
  • 传感器数据(代表温度读数的 JSON 字符串)被序列化并发送到 temperature_readings Kafka 主题。

3.2 Kafka 主题

Kafka 主题是发布和消耗消息的逻辑通道。Kafka 主题是分区的,这意味着每个主题可以划分为多个分区,从而实现并行处理和更好的可伸缩性。Kafka 主题通常按它们包含的数据类型进行组织,从而实现对特定数据类型感兴趣的消费者的高效消费。

在上面的示例中,主题 temperature_readings 包含温度传感器数据,消费者可以订阅该主题来处理数据。

3.3 流处理层

**流处理层**是实时处理数据的地方。Kafka Streams 或 ksqlDB 用于过滤、转换、聚合或丰富数据流。此层支持实时分析和决策制定,因为数据在生成时就被处理。

  • 过滤:仅从传入流中选择相关事件或消息。
  • 转换:数据可以被转换或格式化以满足下游应用程序的需求。
  • 聚合:数据可以根据某些标准进行聚合(例如,计算一段时间内的平均温度)。

Kafka 流处理 Java 代码

输出

Stream-First Architectures with Kafka

在此示例中

  • Kafka Streams 应用程序从 temperature_readings 主题读取消息。
  • 它过滤数据,只传递温度大于 25 度的记录。
  • 然后将过滤后的数据写入 high_temp_alerts 主题。

3.4 数据消费者

**数据消费者**是订阅 Kafka 主题并实时处理事件或消息的应用程序或服务。消费者可以从 Kafka 主题读取数据并根据事件触发操作。消费者可以是存储数据的数据库、可视化数据的仪表板或分析数据的机器学习模型。

在典型的设置中,数据消费者可以订阅多个 Kafka 主题,并根据特定的用例(例如,监控、警报或数据聚合)处理数据。

Kafka 消费者 Java 代码

输出

Stream-First Architectures with Kafka

在上面的代码中

  • Kafka 消费者订阅 high_temp_alerts 主题,该主题接收来自流处理层 else 的消息。
  • 它不断轮询新记录,并打印高温警报。

4. 使用 Kafka 的流式优先架构的应用场景

基于 Kafka 的流式优先架构非常适合各种实时应用程序,例如:

  • 实时分析:流式平台实时收集和处理数据用于分析目的,例如跟踪用户行为、系统运行状况或业务指标。
  • 欺诈检测:Kafka 的低延迟处理能力通过实时监控交易来实现实时欺诈检测。
  • 微服务通信:Kafka 在微服务之间提供可靠的异步消息传递,从而减少了紧耦合并提高了系统灵活性。
  • 客户个性化:Kafka 通过流式传输客户数据并根据用户行为提供建议来实现实时个性化。
  • 设计并行性:分区主题并为并行处理设计消费者,以有效处理大量数据。