使用 Amazon Kinesis 构建实时数据管道 - Data Streams 与 Data Firehose 如何选择
使用 Data Streams 摄取实时数据,并使用 Data Firehose 自动交付到 S3 / Redshift / OpenSearch。本文介绍如何通过分片设计以及与按需模式的选用来构建流式管道。
Kinesis 概述
Kinesis 是提供实时流数据的收集 / 处理 / 分析的一系列服务。Data Streams 提供基于自定义消费者的实时处理,Data Firehose 提供到 S3 和 Redshift 的自动交付。Managed Apache Flink 提供对流数据的 SQL/Flink 处理。
Data Streams 与 Firehose 如何选择
Data Streams 以分片为单位管理吞吐量,并通过 Lambda 或 KCL(Kinesis Client Library)实现自定义处理。它适合需要亚秒级延迟的实时告警,以及多个消费者读取同一个流的情况。Data Firehose 会自动缓冲来自生产者的数据,并将其交付到 S3、Redshift、OpenSearch、Splunk。可以在交付前应用数据转换(Lambda)和格式转换(Parquet),无需实现消费者。对于日志的聚合以及向分析平台的交付,Firehose 是合适的选择。
Data Streams 的设计模式
Data Streams 的分片数根据吞吐量需求来决定。1 个分片提供写入 1 MB/秒(1,000 条记录/秒)、读取 2 MB/秒的能力。在按需模式下,分片数会自动调整;在预置模式下,则手动设置。通过分区键的设计控制数据的分布,防止热分片(向特定分片的偏斜)。启用增强扇出后,会为每个消费者分配专用的 2 MB/秒读取吞吐量,多个消费者可以并行读取同一个流。KCL(Kinesis Client Library)自动管理分片的再平衡和检查点,简化消费者应用程序的开发。
Kinesis 的费用优化
Data Streams 的预置模式按分片小时(约 0.015 美元/小时)和 PUT 有效负载单位(以 25KB 为单位,每 100 万个单位约 0.014 美元)计费(截至 2026 年 8 月)。按需模式按数据摄取量(每 1 GB 约 0.08 美元)和读取量计费,适合流量会变动的工作负载。Data Firehose 仅按摄取的数据量(每 1 GB 约 0.029 美元)计费,无需管理分片。聚合记录、将多个小记录合并为 1 个 PUT 后,PUT 有效负载单位的数量会减少,可以降低 Data Streams 的费用。数据的保留期以 24 小时为下限,延长会产生额外费用,因此根据重放的需求来决定。
与 Lambda 的联动及错误处理
使用 Lambda 处理 Data Streams 时,事件源映射会管理从分片获取记录和批量调用。处理失败的批次会被重试,但如果持续卡在某条特定记录上,后续记录就会停滞。因此,通过指定以二分查找切分失败位置的设置、重试次数的上限以及失败记录的转存目标,仅隔离有问题的记录。提高每个分片的并行执行数可以增加吞吐量,同时同一分片内的顺序依然得到保持。预先完成这些设置后,可以缩短因 1 条记录失败而导致后续处理停止的时间。
Firehose 的转换与交付设计
Data Firehose 可以在交付前加工数据。使用 Lambda 转换记录,并以 Parquet 等列式格式保存 JSON 后,更容易让后续的分析查询变得快速且低成本。使用动态分区,可以根据记录的内容分配 S3 的保存目标路径,自动构建按日期或属性整理的数据湖。通过调整缓冲区的大小和时间来平衡延迟与文件大小,并将转换或交付失败的记录转存到专用的错误输出目标后,可以在之后重新处理失败的记录。
顺序保证 / 重新处理 / 保留期
Data Streams 以分片为单位保持顺序,因此对顺序重要的数据,通过分区键的设计将其集中到同一个分片。数据会在流中保留一定期间,在保留期内,消费者可以回溯过去的数据进行重新处理(重放)。其优势在于,即使消费者因故障停止,恢复后也能从遗漏的部分开始重新读取。但是,延长保留期会带来额外成本,因此设置与重新处理需求相符的期间。以可能发生重复处理为前提,预先将处理设计为幂等,可以避免重新处理时的副作用。
监控与运维的要点
在流式处理平台中,监控表示消费者延迟的指标(所获取记录的经过时间)。如果该指标持续增加,说明处理能力跟不上摄取量,因此重新审视分片数和消费者的并行度。同时确认是否发生了写入或读取的限流,如果有热分片的迹象,则改进分区键的设计。通过仪表板和告警持续跟踪这些指标,可以在延迟和数据遗漏变得严重之前采取措施。
总结
Kinesis 是实时流数据的处理平台。使用 Data Streams 实现自定义的实时处理。使用增强扇出后,多个消费者可以并行读取同一个流。使用 Data Firehose 自动完成到 S3 和 Redshift 的交付,并通过记录聚合减少 PUT 有效负载单位的数量来降低费用。在按需模式下,可以减少自行管理分片数的工作。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。