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

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

注意事项和限制

注意

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

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

  • 吞吐量 — 如果您使用 Dire ct PUT 作为数据源向 Apache Iceberg 表传送数据,则在美国东部(弗吉尼亚北部)、美国西部(俄勒冈)和欧洲(爱尔兰)区域,每个数据流的最大吞吐量为 5 MiB/second ,其他所有区域的最大吞吐量为 1 MiB/second 。 Amazon Web Services 区域如果您想在没有更新和删除的情况下向 Iceberg 表中插入数据,并且想要提高流的吞吐量,则可以使用 Firehose Limits 表单请求提高吞吐量限制

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

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

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

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

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

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

  • 要将加密数据传送到亚马逊 S3 表,您应该在 Amazon S3 表中配置 Amazon Key Management Service 参数,而不是在 Firehose 配置中配置参数。如果您在 Firehose 中配置用于将加密数据传送到亚马逊 S3 表的 Amazon Key Management Service 参数,则 Firehose 无法使用这些参数进行加密。有关更多信息,请参阅对Amazon KMS 密钥使用服务器端加密

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