注意事项和限制 - Amazon Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

注意事项和限制

注意

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

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

  • 吞吐量:如果您使用 Direct PUT 作为源向 Apache Iceberg 表传输数据,则美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)和欧洲地区(爱尔兰)区域每个流的最大吞吐量为 5 MiB/秒,所有其他 Amazon Web Services 区域 为 1 MiB/秒。如果您将数据插入到 Iceberg 表但不执行更新和删除,并且想要提高流的吞吐量,则可以使用 Firehose 限制表单请求提高吞吐量限制。

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

    如果由于较高的数据摄取量超过 Firehose 流的吞吐能力而导致 Direct PUT 流受到节流,则 Firehose 会自动提高流的吞吐量限制,直到节流得到控制。根据吞吐量的增加和节流,Firehose 可能需要更长的时间才能将数据流的吞吐量提高到所需的水平。因此,请继续重试失败的数据摄取记录。如果您预计数据量会突然大幅增加,或者您的新数据流需要的吞吐量比默认吞吐量限制更高,则请求提高吞吐量限制。

  • 每秒 S3 事务数 (TPS) — 为了优化 S3 性能,如果您使用 Kinesis Data Streams 或 Amazon MSK 作为来源,我们建议您使用正确的分区键对源记录进行分区。这样,路由到同一 Iceberg 表的数据记录就会映射到一个或几个被称为分片的源分区。如果可能,将属于不同目标 Iceberg 表的数据记录分散到不同的分区/分片中,这样您就可以使用源主题/流的所有分区/分片中可用的所有聚合吞吐量。

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

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

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

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

  • Firehose 建议不使用多个 Firehose 流将数据写入同一 Apache Iceberg 表中。这是因为 Apache Iceberg 依赖于乐观并发控制 (OCC)。如果多个 Firehose 流尝试同时写入单个 Iceberg 表,则在给定时间只有一个流成功提交数据。其他无法提交回退的流,然后重试提交操作,直到配置的重试持续时间到期。重试持续时间用完后,数据和删除文件密钥(Amazon S3 路径)将发送到配置的 Amazon S3 错误前缀。

  • Firehose 支持的当前 Iceberg 库版本为 1.5.2 版。

  • 要将加密数据传输到 Amazon S3 表类数据存储服务,您应该在 Amazon S3 表类数据存储服务中配置 Amazon Key Management Service 参数,而不是在 Firehose 配置中配置参数。如果您在 Firehose 中配置 Amazon Key Management Service 参数以便将加密数据传输到 Amazon S3 表类数据存储服务,则 Firehose 无法使用这些参数进行加密。有关更多信息,请参阅借助 Amazon KMS 密钥使用服务器端加密

  • Firehose 流仅支持传输到通过 Iceberg 的 GlueCatalog API 创建的数据库和表。不支持传输到通过 Glue SDK 创建的数据库和表。请注意,Iceberg 库中的数据库和表名不支持连字符 (-)。有关更多详细信息,请参阅 Iceberg 库支持的 Glue 数据库正则表达式Glue 表正则表达式

  • Firehose 写入的所有文件都是使用记录中存在的分区计算的。这也适用于删除的文件。不支持全局删除,例如为分区表写入未分区的删除文件。