使用 Kafka、Azure 函数和 Cosmos DB 进行端到端数据流

2025 年 5 月 16 日 | 阅读 4 分钟

1. 端到端数据流简介

在现代基于云的架构中,实时数据流对于处理大规模事件驱动数据至关重要。Apache Kafka、Azure Functions 和 Azure Cosmos DB 的结合为实现低延迟、可扩展且高度可用的数据流解决方案提供了强大的支持。

1.1. 实时数据流的需求

传统的批处理方法会引入延迟,不适用于欺诈检测、个性化推荐和物联网遥测分析等实时应用。流式处理架构使企业能够处理和分析生成的数据。

1.2. 流式处理管道的组成部分

典型的实时数据流管道由以下部分组成:

数据生产者

数据生产者从各种来源(如用户活动、IoT 传感器和金融交易)生成实时数据。这些生产者将数据发送到 Kafka 主题。

Python Kafka 生产者代码

预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

消息代理 (Kafka)

Kafka 作为分布式消息代理,负责捕获和传输数据流。Kafka 主题 "user-events" 存储用户活动数据。

Kafka 主题创建

启动 Kafka 消费者以验证数据

预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

流处理层 (Azure Functions)

Azure Functions 在将数据发送到 Cosmos DB 之前,会对其进行处理、转换或过滤。

Azure Function for Kafka Trigger

日志中的预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

存储 (Cosmos DB)

处理后的事件存储在 Azure Cosmos DB 中,用于分析和查询。

查询 Cosmos DB

预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

1.3. Kafka、Azure Functions 和 Cosmos DB 的优势

  • 可扩展性:Kafka 可处理高吞吐量的事件摄取,Azure Functions 自动扩展,Cosmos DB 支持弹性扩展。
  • 容错性:Kafka 确保消息持久性,Azure Functions 内置重试机制,Cosmos DB 提供多区域复制。
  • 事件驱动处理:Azure Functions 异步响应 Kafka 事件。

1.4. 用例

  • 实时分析:跟踪流媒体服务中的用户行为。
  • IoT 数据处理:监控智能设备和工业传感器。
  • 金融交易:银行应用程序中的欺诈检测。

2. Apache Kafka 概述

Apache Kafka 是一个分布式事件流平台,专为高吞吐量、容错和可扩展的实时数据处理而设计。它包含:

2.1. Kafka 核心组件

  • 生产者:将数据发布到 Kafka 主题。
  • 主题:流式数据的逻辑容器。
  • 代理:管理数据分发的 Kafka 服务器。
  • 消费者:订阅并处理主题中数据的应用程序。
  • ZooKeeper:管理元数据、领导者选举和配置。

2.2. Kafka 架构

Kafka 遵循分布式架构,其中:

  • 数据写入主题
  • 主题被划分为分区以实现可扩展性。
  • 生产者将数据写入分区。
  • 消费者根据消费者组从分区读取数据。

2.3. 设置 Kafka

安装 Kafka

启动 Kafka 和 ZooKeeper

创建 Kafka 主题

3. Azure Functions 简介

Azure Functions 是一项无服务器计算服务,允许用户在不管理基础设施的情况下运行事件驱动的代码。它支持包括 Kafka 在内的多种触发器,非常适合处理流式数据。

3.1. Azure Functions 执行模型

  • 消耗计划:根据调用次数自动扩展。
  • 高级计划:提供增强的性能和扩展能力。
  • 专用 (App Service) 计划:提供对执行的更多控制。

3.2. 创建 Azure Function

安装 Azure Functions Core Tools

创建新的 Azure Function App

4. 理解 Azure Cosmos DB

Azure Cosmos DB 是一个全球分布式的 NoSQL 数据库,提供高可用性、可扩展性和多模型支持。它针对事件驱动架构进行了优化,并支持:

4.1. 主要功能

  • 多区域复制:确保低延迟访问。
  • 五种一致性模型:强一致性、边界陈旧性、会话一致性、一致性前缀和最终一致性。
  • 自动索引:提高查询性能。

5. Kafka-Azure Functions-Cosmos DB 管道架构

5.1. 数据流

  1. Kafka 生产者:将消息(例如,用户活动日志)发布到 Kafka 主题。
  2. Kafka 代理:将消息路由到适当的分区。
  3. Azure Functions Kafka Trigger:监听 Kafka 主题并处理数据。
  4. Azure Cosmos DB:存储处理后的数据以供分析和操作使用。

5.2. 数据流实现

预期的 Cosmos DB 查询结果

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

6. 实现 Kafka 生产者

6.1. 在 Python 中设置 Kafka 生产者

预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

7. 使用 Azure Functions 实现 Kafka 消费者

7.1. Azure Function Kafka Trigger

预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB

8. 查询 Cosmos DB 以获取处理后的数据

8.1. 预期输出

End-to-End Data Streaming with Kafka, Azure Functions, and Cosmos DB