注意事项和限制 - Amazon Data Firehose

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

注意事项和限制

注意

AWS 区域中国地区和亚太地区(马来西亚)外,Firehose 在所有地区都支持 Apache Iceberg Tables 作为目的地。 AWS GovCloud (US) Regions

Firehose 对 Apache Iceberg 表的支持具有以下注意事项和限制。

  • 吞吐量 — 如果您使用 Direct PUT 作为源来向 Apache Iceberg 表传送数据,则所有其他流的最大吞吐量为 5 MiB/second in US East (N. Virginia), US West (Oregon), and Europe (Ireland) Regions and 1 MiB/second。 AWS 区域如果您想在没有更新和删除的情况下将数据插入到 Iceberg 表,并且想要提高流的吞吐量,则可以使用 Firehose 限制表单请求提高吞吐量限制

    True如果您只想插入数据而不想执行更新和删除,也可以将该AppendOnly标志设置为。通过将该AppendOnly标志设置为True,Firehose 会自动缩放以匹配您的吞吐量。目前,您只能通过 CreateDeliveryStreamAPI 操作设置此标志。

    如果 D irect PUT 流因更高的数据采集量超过 Firehose 流的吞吐量而受到限制,那么 Firehose 会自动增加该流的吞吐量限制,直到限制得到控制。根据吞吐量的增加和限制,Firehose 可能需要更长的时间才能将直播的吞吐量提高到所需的水平。因此,请继续重试失败的数据采集记录。如果您预计数据量会突然大幅增加,或者您的新数据流需要比默认吞吐量限制更高的吞吐量,请请求提高吞吐量限制。

  • 每秒 S3 事务数 (TPS) — 为了优化 S3 性能,如果您使用 Kinesis Data Streams 或 Amazon MSK 作为来源,我们建议您使用正确的分区键对源记录进行分区。这样,路由到同一 Iceberg 表的数据记录就会映射到一个或几个被称为分片的源分区。如果可能,将属于不同目标 Iceberg 表的数据记录分散到不同的 Iceberg 表中。partitions/shards, so that you can use all the aggregate throughput available across all the partitions/shards of the source topic/stream

  • :对于列名称和值,Firehose 仅采用多级嵌套 JSON 中的第一级节点。例如,Firehose 选择第一级中可用的节点,包括位置字段。源数据的列名和数据类型应与目标表的列名和数据类型相匹配,Firehose 才能成功传输。在这种情况下,Firehose 希望您的 Iceberg 表中有结构或地图数据类型列来匹配位置字段。Firehose 支持 16 个级别的嵌套。以下是嵌套 JSON 的示例。

    { "version":"2016-04-01", "deviceId":"<solution_unique_device_id>", "sensorId":"<device_sensor_id>", "timestamp":"2024-01-11T20:42:45.000Z", "value":"<actual_value>", "position":{ "x":143.595901, "y":476.399628, "z":0.24234876 } }

    如果列名或数据类型不匹配,则 Firehose 会抛出错误并将数据传输到 S3 错误存储桶。如果 Apache Iceberg 表中的所有列名和数据类型都匹配,但源记录中存在其他字段,则 Firehose 会跳过新字段。

  • 每条记录一个 JSON 对象:您只能在一条 Firehose 记录中发送一个 JSON 对象。如果您在记录中聚合并发送多个 JSON 对象,则 Firehose 会抛出错误并将数据传输到 S3 错误存储桶。如果您使用 KPL 聚合记录,并将数据摄取到 Firehose 中,将 Amazon Kinesis Data Streams 作为源,则 Firehose 会自动解聚,并为每条记录使用一个 JSON 对象。

  • 压缩和存储优化:每次使用 Firehose 写入 Iceberg 表时,它都会提交和生成快照、数据文件和删除文件。拥有多个数据文件会增加元数据开销并影响读取性能。为了获得有效的查询性能,您可能需要考虑一种解决方案,即定期获取小的数据文件并将它们重写为较少的较大数据文件。此过程称为压缩。 AWS Glue Data Catalog 支持自动压缩 Apache Iceberg 表。有关更多信息,请参阅《AWS Glue 用户指南》中的 Compaction management。有关更多信息,请参阅 Automatic compaction of Apache Iceberg Tables。或者,您可以运行 Athena Otime 命令来手动执行压缩。有关 “优化” 命令的更多信息,请参阅 Athena Otime

    除了压缩数据文件外,您还可以使用对 Apache Iceberg 表执行表维护的 VACUM 语句来优化存储消耗,例如快照过期和孤立文件删除。或者,您可以通过自动移除不再需要的数据文件、孤立文件和过期快照,以使用 AWS Glue Data Catalog 同样支持 Apache Iceberg 表的托管表优化的。有关更多信息,请参阅这篇关于 Storage optimization of Apache Iceberg Tables 的博客文章。

  • 我们不支持 Apache Iceberg 表的 Amazon MSK 无服务器源作为目的地。

  • 对于更新操作,Firehose 会先放一个删除文件,然后再执行插入操作。放置删除文件会产生 Amazon S3 存入费用。