使用 Kafka 的流优先架构2025年5月15日 | 阅读 7 分钟 1. 理解流式优先架构流式优先架构是指一种旨在处理实时、连续数据流而非离散、定时批处理数据的架构。它侧重于在数据产生时捕获、处理和响应的能力,与传统的批处理系统相比具有多项优势。这些系统优先考虑即时、连续的数据处理,使企业能够利用实时洞察并及时采取行动。 流式优先架构的关键原则包括:- 实时处理:数据在生成或接收后立即进行处理,而不是等待计划的时间间隔。这使得系统能够更快地响应。
- 事件驱动:在此架构中,系统中的每个重要更改(事件)都会触发操作,使其对外部条件高度敏感。
- 服务解耦:系统不同组件通过事件异步通信。这种解耦增加了灵活性和可伸缩性,因为服务可以独立发展。
流式优先架构的关键优势- 更快的决策制定:通过实时处理数据,可以立即做出决策,无需等待批处理周期。
- 降低延迟:流式优先架构最大限度地减少了事件生成与响应之间的延迟,这对于需要快速响应的应用程序至关重要,例如欺诈检测、股票交易或客户服务。
- 可伸缩性和容错性:由于流式优先架构通常依赖于分布式系统,因此它们可以水平扩展以处理大量数据,并且通过复制数据和处理任务来提供容错能力。
2. Apache Kafka 在流式优先架构中的作用Kafka 在流式优先架构中发挥着举足轻重的作用。Kafka 使企业能够高效、大规模地收集、处理和管理数据流。它提供了高吞吐量、低延迟、持久性和容错性等功能,使其成为流式优先系统的理想选择。 2.1 Kafka 作为中心数据中心Kafka 在流式优先架构中 - 实时数据流:Kafka 设计用于快速、低延迟地处理大量数据,使其成为从不同源收集实时数据的理想选择。
- 分布式数据管理:Kafka 将数据分区到多个代理中,确保数据增长时的可伸缩性和弹性。
- 持久性和可靠性:Kafka 通过在代理之间复制数据来确保数据持久性,即使某些代理发生故障,消费者也可以检索数据。
Java 中 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 示例(温度警报) 输出  在上面的代码中 - 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 代码 输出  在上面的代码中 - Kafka 生产者使用必要的属性进行配置,例如代理地址(localhost:9092)。
- 传感器数据(代表温度读数的 JSON 字符串)被序列化并发送到 temperature_readings Kafka 主题。
3.2 Kafka 主题Kafka 主题是发布和消耗消息的逻辑通道。Kafka 主题是分区的,这意味着每个主题可以划分为多个分区,从而实现并行处理和更好的可伸缩性。Kafka 主题通常按它们包含的数据类型进行组织,从而实现对特定数据类型感兴趣的消费者的高效消费。 在上面的示例中,主题 temperature_readings 包含温度传感器数据,消费者可以订阅该主题来处理数据。 3.3 流处理层**流处理层**是实时处理数据的地方。Kafka Streams 或 ksqlDB 用于过滤、转换、聚合或丰富数据流。此层支持实时分析和决策制定,因为数据在生成时就被处理。 - 过滤:仅从传入流中选择相关事件或消息。
- 转换:数据可以被转换或格式化以满足下游应用程序的需求。
- 聚合:数据可以根据某些标准进行聚合(例如,计算一段时间内的平均温度)。
Kafka 流处理 Java 代码 输出  在此示例中 - Kafka Streams 应用程序从 temperature_readings 主题读取消息。
- 它过滤数据,只传递温度大于 25 度的记录。
- 然后将过滤后的数据写入 high_temp_alerts 主题。
3.4 数据消费者**数据消费者**是订阅 Kafka 主题并实时处理事件或消息的应用程序或服务。消费者可以从 Kafka 主题读取数据并根据事件触发操作。消费者可以是存储数据的数据库、可视化数据的仪表板或分析数据的机器学习模型。 在典型的设置中,数据消费者可以订阅多个 Kafka 主题,并根据特定的用例(例如,监控、警报或数据聚合)处理数据。 Kafka 消费者 Java 代码 输出  在上面的代码中 - Kafka 消费者订阅 high_temp_alerts 主题,该主题接收来自流处理层 else 的消息。
- 它不断轮询新记录,并打印高温警报。
4. 使用 Kafka 的流式优先架构的应用场景基于 Kafka 的流式优先架构非常适合各种实时应用程序,例如: - 实时分析:流式平台实时收集和处理数据用于分析目的,例如跟踪用户行为、系统运行状况或业务指标。
- 欺诈检测:Kafka 的低延迟处理能力通过实时监控交易来实现实时欺诈检测。
- 微服务通信:Kafka 在微服务之间提供可靠的异步消息传递,从而减少了紧耦合并提高了系统灵活性。
- 客户个性化:Kafka 通过流式传输客户数据并根据用户行为提供建议来实现实时个性化。
- 设计并行性:分区主题并为并行处理设计消费者,以有效处理大量数据。
|