流数据处理设计 - 使用 Kinesis 构建实时数据管道

解析利用 Amazon Kinesis 的流数据处理设计方法,介绍通过 Data Streams、Data Firehose 和 Lambda 集成构建实时数据管道的方法。

实时数据处理的需求与 Kinesis 的角色

来自 IoT 设备的传感器数据、Web 应用的点击流、金融交易日志、社交媒体信息流等,对实时生成的大量数据进行即时处理和分析的需求正在快速增长。批处理会产生数小时到数天的时间延迟,而流处理可以在数据生成后数秒内获得分析结果。Amazon Kinesis 是一组全托管服务,用于实时收集、处理和分析流数据。Kinesis Data Streams 提供数据流基础设施,Kinesis Data Firehose 负责数据传输,Kinesis Data Analytics 负责流数据的 SQL/Apache Flink 分析。

通过 Kinesis Data Streams 收集数据

Kinesis Data Streams 是一项实时收集和保留大量流数据的服务。数据流由分片组成,每个分片支持每秒 1 MB 的写入和 2 MB 的读取。在按需模式下,分片数量根据流量自动扩缩,无需容量规划。在预置模式下,可以明确指定分片数量以优化成本。数据保留期默认为 24 小时,最长可延长至 365 天。使用 Kinesis Producer Library (KPL) 可以通过记录聚合和缓冲最大化生产者端的吞吐量。增强扇出功能为每个消费者确保专用的读取吞吐量(每分片 2 MB/秒),使多个消费者可以并行处理同一数据流。

通过 Lambda 集成实现无服务器流处理

Kinesis Data Streams 与 Lambda 的集成作为无服务器流处理模式被广泛采用。Lambda 通过事件源映射自动从 Kinesis 流轮询记录,并以批次为单位传递给 Lambda 函数。通过调整批次大小、批次窗口和并行化因子,可以优化吞吐量和延迟的平衡。设置并行化因子后,单个分片可由多个 Lambda 实例并行处理,提升处理能力。在错误处理方面,bisect on function error 功能可自动将失败的批次二分并重试,定位有问题的记录。处理失败的记录可发送到 SQS 死信队列,便于后续调查和重新处理。使用过滤功能可以在传递给 Lambda 函数之前按条件过滤记录,避免处理不必要的记录。Lambda 事件源映射中设置过滤的 CLI 示例:aws lambda create-event-source-mapping --function-name process-orders --event-source-arn arn:aws:kinesis:ap-northeast-1:123456789012:stream/orders --starting-position LATEST --batch-size 100 --maximum-batching-window-in-seconds 5 --filter-criteria "{"Filters":[{"Pattern":"{\"data\":{\"event_type\":[\"ORDER_PLACED\"]}}"}]}" 仅将 ORDER_PLACED 事件传递给 Lambda,避免处理不必要的记录以优化成本。 从基础到应用全面学习实时数据处理,可参考书籍 (Amazon)进行系统学习。

通过 Data Firehose 传输与 S3 集成

Kinesis Data Firehose 是一项将流数据自动传输到 S3、Redshift、OpenSearch、Splunk 等目标的服务。从数据接收到缓冲、转换、压缩、传输全部自动化,无需开发消费者应用程序。通过设置缓冲大小(1 - 128 MB)和缓冲间隔(60 - 900 秒),可以控制传输频率和批次大小。数据转换功能可使用 Lambda 函数在传输前执行记录的格式转换、过滤和数据增强。向 S3 传输时,可自动转换为 Parquet 或 ORC 格式,构建针对 Athena 或 Redshift Spectrum 分析优化的数据湖。动态分区功能可根据记录内容动态决定 S3 前缀,实现高效的数据组织。

Kinesis 的定价

Kinesis Data Streams 按需模式每 GB 约 0.08 美元(写入)和约 0.04 美元(读取)。预置模式每分片小时约 0.015 美元。Kinesis Data Firehose 每 GB 约 0.029 美元。与 MSK (Kafka) 相比,Kinesis 与 AWS 服务的原生集成更丰富,在中小规模流处理中成本效率更高。需要大规模 Kafka 生态系统时选择 MSK。

总结

Amazon Kinesis 作为全面覆盖流数据收集、处理和传输的全托管服务群,支持实时数据管道的构建。Data Streams 的按需模式无需容量规划即可实现可扩展的数据收集。通过与 Lambda 的集成实现无服务器流处理,无需基础设施管理即可进行实时数据转换和分析。Data Firehose 通过向 S3 自动传输和 Parquet 转换,自动化构建分析优化的数据湖。对于致力于构建实时数据处理基础设施的组织,Kinesis 是核心服务。