一般和串流 ETL 概念
问:什么是串流 ETL?
串流 ETL 是指实时数据从一个地方到另一个地方的处理和移动。ETL 是数据库函数提取 (extract)、转换 (transform) 和加载 (load) 的缩写。提取是指从某个源收集数据。转换是指对该数据执行的任何处理。加载是指将处理后的数据发送到目标,如仓库、数据湖或分析工具。
问:什么是 Amazon Data Firehose?
Data Firehose 是一种串流 ETL 解决方案。这是将串流数据加载到数据存储和分析工具的最简单方式。其功能包括采集、转换串流数据,并将其加载到 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Snowflake、Apache Iceberg 表和 Splunk,让您可以借助正在使用的现有业务情报工具和控制面板,进行近乎实时的分析。这是一项完全托管的服务,会自动扩展以匹配数据吞吐量,并且无需持续管理。它还可以在加载数据前对其进行批处理、压缩和加密,从而最大程度地减少目的地使用的存储量,同时提高安全性。
问:Firehose 中的源是什么?
源是指您的串流数据连续生成和捕获的位置。例如,源可以是 Amazon EC2 实例上运行的日志服务器、移动设备上运行的应用程序或 IoT 设备上的传感器。您可以使用以下方式将源连接到 Firehose 1) Amazon Data Firehose API,使用的是适用于 Java、.NET、Node.js、Python 或 Ruby 的 AWS SDK。2) Kinesis 数据流,其中 Firehose 可以轻松地从现有的 Kinesis 数据流读取数据,并将其加载到 Firehose 目标。3) Amazon MSK,其中 Firehose 可以轻松地从现有的 Amazon MSK 集群读取数据并将其加载到 Amazon S3 存储桶中。4) AWS 原生支持的服务,如 AWS Cloudwatch、AWS EventBridge、AWS IOT 或 AWS Pinpoint。有关完整列表,请参阅 Amazon Data Firehose 开发人员指南。5) Kinesis Agents,这是一种独立的 Java 软件应用程序,可连续监控一组文件,并向流发送新数据。6) Fluentbit,这是一种开源日志处理器和转发器。7) AWS Lambda,这是一项无服务器计算服务,让您无需预置或管理服务器即可运行代码。您可以使用写入 Lambda 函数根据触发的事件将流量从 S3 或 DynamoDB 发送到 Firehose。
问:Firehose 中的目标是什么?
目标是数据将交付到的数据存储。Firehose 当前支持将 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Snowflake、Apache Iceberg 表、Splunk、Datadog、NewRelic、Dynatrace、Sumo Logic、LogicMonitor、MongoDB 和 HTTP 端点作为目标位置。
问:Firehose 可代表我管理哪些内容?
Data Firehose 能够管理将您的数据捕获并加载到 Amazon S3、Amazon Redshift、Amazon OpenSearch Service、Snowflake、Apache Iceberg 表或 Splunk 所需的所有底层基础设施、存储、联网和配置。您不必操心预置、部署、持续维护硬件、软件,或编写任意其他应用程序来管理这一流程。而且,Data Firehose 还能灵活扩展,无需任何人工干预,不产生相关的开发人员开销。此外,Data Firehose 还可在一个 AWS 区域的三个设施之间同步复制数据,在将数据传输到目标的同时,提供高可用性和持久性。
问:如何使用 Firehose?
注册 Amazon Web Services 后,您可以按照以下步骤开始使用 Firehose:
- 通过 Firehose 控制台或 CreateDeliveryStream 操作创建 Firehose 流。您可以选择在 Firehose 流中配置 AWS Lambda 函数,以便在加载原始数据之前进行准备和转换。
- 使用 Amazon Kinesis Agent 或 Firehose API 配置数据创建器,以持续地向 Firehose 流发送数据。
- Firehose 会自动和持续地将数据加载到您指定的目标。
问:什么是 Firehose 中的 Firehose 流?
Firehose 流是 Firehose 的基础实体。您通过创建 Firehose 流然后向其发送数据的方式来使用 Firehose。您可以通过 Firehose 控制台或 CreateDeliveryStream 操作创建 Firehose 流。有关更多信息,请参阅创建 Firehose 流。
问:Firehose 中的记录是什么?
记录是您的数据创建器发送到 Firehose 流的重要数据。如果您的数据来源是 Direct PUT 或 Kinesis Data Streams,则记录的最大大小(在 Base64 编码之前)为 1024 KB。如果您的数据来源是 Amazon MSK,则记录的最大大小(在 Base64 编码之前)为 10 MB。
问:Firehose 的限制是什么?
有关限制的信息,请参阅开发人员指南中的 Amazon Data Firehose 限制。
数据源
问:我可以使用哪些编程语言或平台访问 Firehose API?
Firehose API 在 Amazon Web Services 软件开发工具包中可用。有关适用于 Amazon Web Services 软件开发工具包的编程语言或平台的列表,请参阅用于 Amazon Web Services 的工具。
问:什么是 Amazon Kinesis Agent?
Kinesis Agent 是一款预构建的 Java 应用程序,可提供简单的方法来收集数据并将其发送到 Firehose 流。您可以在基于 Linux 的服务器环境(如 Web 服务器、日志服务器和数据库服务器)上安装此代理。此代理监控特定文件并持续发送数据到 Firehose 流。目前,Amazon Kinesis Agent 支持 Amazon Linux、Red Hat Enterprise Linux 和 Microsoft Windows。有关更多信息,请参阅使用代理写入。
问:在哪里能够获取 Amazon Kinesis 代理?
您可以使用下面的命令及链接下载和安装 Kinesis 代理:
- 在 Amazon Linux 上:sudo yum install –y aws-kinesis-agent
- 在 Red Hat Enterprise Linux 上:sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm
- 通过 GitHub:awlabs/amazon-kinesis-agent
- 在 Windows 上:https://docs.aws.amazon.com/kinesis-agent-windows/latest/userguide/getting-started.html#getting-started-installation
问:PutRecord 与 PutRecordBatch 操作有何区别?
您可以通过 Kinesis Agent 或 Firehose 的 PutRecord 和 PutRecordBatch 操作向 Firehose 流添加数据。PutRecord 操作允许 API 调用内的单个数据记录,而 PutRecordBatch 操作允许 API 调用内的多个数据记录。有关更多信息,请参阅 PutRecord 和 PutRecordBatch。
问:如何将数据从我的 Amazon MSK 添加到我的 Firehose 流?
当通过 AWS 管理控制台或 Firehose API 创建或更新 Firehose 流时,您可以配置一个 Amazon MSK 集群/主题作为 Firehose 流的来源。配置完毕后,Firehose 将自动从 MSK 主题中读取数据,并将数据加载到指定 S3 存储桶。
问:Amazon MSK 与 Firehose 集成的主要优势是什么?
无需代码即可将源自 Amazon MSK 主题的流数据转换并加载到 Amazon S3 中,从而降低应用程序操作的复杂性和开销。例如,使用 Amazon MSK 和 Firehose,无需代码即可使用内置的数据转换功能,例如 Parquet/ORC 格式转换、数据缓冲和服务端数据验证。您还可以获得自动传输重试、数据留存、自动扩缩和冗余功能,从而可靠地传输数据。
问:Firehose 支持哪些类型的 Amazon MSK 端点?
要使用此功能,MSK 集群必须启用公共端点或专用链接。
问:能否将 Firehose 连接到不同 AWS 账户中的 Amazon MSK 集群?
能,Firehose 可以连接到不同 AWS 账户中可用的 Amazon MSK 集群。Firehose 还可以传输到属于不同账户的 S3 存储桶。
问:开始使用 Amazon MSK 主题数据的检查点时间是什么时候?
开始使用 Amazon MSK 主题中的数据的检查点时间是 Firehose 流的创建时间。Firehose 不会读取自定义偏移值。
问:如何从 Kinesis Data Stream 向 Firehose 流添加数据?
当通过 AWS 管理控制台或 Firehose API 创建或更新 Firehose 流时,您可以配置一个 Firehose 流作为 Firehose 流的源。配置完毕后,Firehose 将自动从 Firehose 流中读取数据,并将数据加载到指定目的地。
问:Firehose 从 Kinesis 流中读取数据的频率如何?
Firehose 每秒就会在每个 Kinesis 分区中调用一次 Kinesis Data Streams GetRecords()。
问:将 Kinesis 数据流配置为 Firehose 流的源时,Firehose 从哪里读取数据?
将 Kinesis 数据流配置为 Firehose 流的源时,Firehose 将从 Kinesis 数据流的 LATEST 位置开启读取数据。有关 Kinesis 数据流位置的更多信息,请参阅 Kinesis Data Streams Service API 参考中的 GetShardIterator。
问:可以将 Kinesis 数据流配置为多个 Firehose 流的源吗?
是的,您可以。但请注意,来自 Firehose 的 GetRecords() 调用是根据 Kinesis 分片的总节流限制计数的,因此您需要连同其它 Kinesis 应用程序一起来规划 Firehose 流,以防其受到限制。有关更多信息,请参阅 Kinesis Data Streams 开发人员指南中的 Kinesis Data Streams 限制。
问:将 Kinesis 数据流配置为源后,我还能继续通过 Kinesis Agent 或 Firehose 的 PutRecord 和 PutRecordBatch 操作将数据添加至 Firehose 流吗?
不可以。将 Kinesis 数据流配置为 Firehose 流的源后,Firehose 的 PutRecord 和 PutRecordBatch 操作将被禁用。您应通过 Kinesis Data Streams 的 PutRecord 和 PutRecords 操作将数据添加至 Kinesis 数据流。
问:如何从 AWS IoT 添加数据到 Firehose 流?
您可以通过创建将事件发送至 Firehose 流的 AWS IoT 操作,来将数据添加到 Firehose 流。有关更多信息,请参阅 Kinesis Firehose 开发人员指南中的使用 AWS IoT 写入 Amazon Data Firehose。
问:我如何将 VPC 流日志流式传输到 Firehose?
当通过 AWS 管理控制台或 Firehose API 创建或更新 Firehose 流时,您可以配置一个 Direct PUT 作为 Firehose 流的源。创建流后,您可以在 VPC 流日志控制台的公开日志部分将创建的 Firehose 流配置为您的 Firehose 流。
问:如何从 CloudWatch Logs 添加数据到 Firehose 流?
您可以通过创建将事件发送至 Firehose 流的 CloudWatch Logs 订阅筛选条件,来将数据添加到 Firehose 流。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的使用 CloudWatch Logs 订阅筛选条件。
问:如何从 CloudWatch Events 添加数据到 Firehose 流?
您可以通过创建将 Firehose 流作为目标的 CloudWatch Events 规则,从 CloudWatch Events 添加数据到 Firehose 流。有关更多信息,请参阅 Firehose 开发人员指南中的使用 CloudWatch Events 写入 Amazon Data Firehose。
问:如何从 AWS Eventbridge 添加数据到 Amazon Data Firehose 流?
您可以从 AWS EventBridge 控制台添加数据到 Firehose 流。有关更多信息,请参阅 AWS EventBridge 文档。
问:可以使用哪种类型的加密?
Firehose 允许您在将数据交付至 Amazon S3 存储桶后加密数据。在创建 Firehose 流时,您可以选择使用您拥有的 AWS Key Management Service(KMS)密钥加密数据。有关 KMS 的更多信息,请参阅 AWS Key Management Service。
问:在创建 Firehose 流时需要指定的 IAM 角色是什么?
Firehose 承担您指定的 IAM 角色,以访问 Amazon S3 桶和 Amazon OpenSearch 域等资源。有关更多信息,请参阅 Firehose 开发人员指南中的使用 Firehose 控制访问。
数据转换和格式转换
问:如何在 Firehose 中准备和转换原始数据?
Firehose 支持内置的数据格式转换,可以将来自原始数据或 Json 的数据转换为目标数据存储所需的格式(如 Apache Parquet 和 Apache ORC),无需构建自己的数据处理管道。Firehose 还允许您使用静态或动态定义的键(如“customer_id”或“transaction_id”),在交付给 S3 之前动态划分串流数据。Firehose 通过这些键对数据进行分组,并交付到键唯一的 S3 前缀中,使您能够更轻松地使用 Athena、EMR 和 Redshift Spectrum 在 S3 中执行高性能、成本高效的分析。
除了 Amazon Data Firehose 中内置的格式转换选项外,您还可以在将 Firehose 流中的传入原始数据加载到目标之前,使用 AWS Lambda 函数准备和转换这些原始数据。您可以在创建新的 Firehose 流或编辑现有 Firehose 流时配置一个 AWS Lambda 函数,用于数据转换。Amazon 已经创建了多个 Lambda 蓝图,您可以从中选择快速启动。有关完整列表,请参阅 Amazon Data Firehose 开发人员指南。
问:可以使用什么压缩格式?
使用 Amazon Data Firehose,您可以在向 Amazon S3 交付数据前压缩数据。该服务目前支持 GZIP、ZIP 和 SNAPPY 压缩格式。如果将数据进一步加载到 Amazon Redshift,则仅支持 GZIP 格式。
问:当使用 CloudWatch Logs 订阅功能时,如何执行压缩?
您可以使用 CloudWatch Logs 订阅功能将数据从 CloudWatch Logs 流式传输到 Firehose。CloudWatch Logs 的所有日志事件已经采用 gzip 格式进行压缩,因此您应确保 Firehose 的压缩配置为未压缩,以避免重复压缩。有关 CloudWatch Logs 订阅功能的更多信息,请参阅 Amazon CloudWatch Logs 用户指南中的 Amazon Data Firehose 订阅筛选条件。
问:如何将准备好并且已经转换的数据从 AWS Lambda 函数返回到 Amazon Data Firehose?
Lambda 中的所有转换记录在返回到 Firehose 时必须具备以下三个参数,否则,Firehose 将拒绝接收记录并将其视为数据转换失败。
- recordId:在调用期间,Firehose 将 recordId 和每条记录一起发送到 Lambda。每条转换记录在返回时应具有完全相同的 recordId。原始 recordId 和返回的 recordId 之间存在任何不匹配都将被视为数据转换失败。
- result:每条记录的转换结果的状态。这一参数可以使用以下值:如果记录按预期转换成功,那么值为“Ok”。如果处理逻辑按预期有意丢弃记录,那么值为“Dropped”。如果未能按照预期转换记录,那么值为“ProcessingFailed”。在生成 SucceedProcessing.Records 和 SucceedProcessing.Bytes 指标时,Firehose 将返回的状态为“Ok”和“Dropped”的记录视为已处理成功的记录,将状态为“ProcessingFailed”的记录视为处理失败的记录。
- data:Based64 编码之后的转换后数据负载。
问:什么是错误日志记录?
如果您使用 Lambda 进行数据转换,Firehose 可以将任何 Lambda 调用和数据传输错误记录到 Amazon CloudWatch Logs,以便您在 Lambda 调用失败或数据传输失败时查看特定的错误日志。有关更多信息,请参阅使用 Amazon CloudWatch Logs 进行监控。
问:什么是源记录备份?
如果您使用 Lambda 进行数据转换,则可以启用源记录备份,Amazon Data Firehose 会将未转换的传入数据交付至单独的 S3 存储桶。您可以指定要添加到 Firehose 生成的“YYYY/MM/DD/HH”UTC 时间前缀之前的其他前缀。
Amazon S3 内置的数据转换
问:何时应使用 Firehose 动态分区?
Firehose 动态分区消除了在源位置或存储数据后手动分区的复杂性和延迟,并支持查询优化数据集,以加快分析。这使得数据集可立即供分析工具使用,以高效运行查询,并增强对数据的细粒度访问控制。例如,营销自动化客户可以根据客户 id 动态划分数据,允许使用客户特定的查询,以查询优化数据集,并更快交付结果。IT 运营或安全监控客户可以根据日志中嵌入的事件时间戳创建分组,以便查询优化数据集,并更快地获得结果。此功能与 Amazon Data Firehose 现有的 JSON 到 parquet 转换功能相结合,使 Amazon Data Firehose 成为 S3 理想的串流 ETL 选项。
问:如何使用 Firehose 设置动态分区?
可以通过 AWS 管理控制台、CLI 或 SDK 设置 Firehose 数据分区功能。创建或更新 Firehose 流时,选择 Amazon S3 作为 Firehose 流的传输目标,并启用动态分区。您可以指定键,或创建表达式在运行时进行计算,以定义用于分区的键。例如,您可以在传入的流式传输中选择一个数据字段,如客户 id,并定义一个 S3 前缀表达式,如 customer_id=!{partitionKey:customer_id}/,在运行时将根据摄取的记录进行评估,以定义将记录传输到哪个 S3 前缀。
问:通过动态分区和分区键,可以进行什么样的转换和数据处理?
当您将数据写入 Amazon S3 时,Firehose 支持开箱即用的 parquet/orc 转换。Firehose 还集成了 Lambda 函数,因此您还可以自行编写转换代码。Firehose 还内置了从 JSON 格式的记录中提取关键数据字段的支持。Firehose 还支持 JQ 解析语言,以便对这些分区键启用转换。如要了解更多信息,请参阅 Firehose 开发人员指南。
数据传输和目标
问:能否在 S3 存储桶中保留所有原始数据的副本?
能。Firehose 可以在将转换后的记录传输到目标的同时,将所有未转换的记录备份到您的 S3 存储桶。您可以在创建或更新 Firehose 流时启用源记录备份。
问:Firehose 多久向 Amazon S3 存储桶交付一次数据?
向 Amazon S3 传输数据的频率取决于您为 Firehose 流配置的 S3 缓冲区大小和缓冲间隔值。Firehose 会先缓冲传入数据,然后再将其交付至 Amazon S3。您可以配置 S3 缓冲区大小(1MB 到 128MB)或缓冲间隔值(60 到 900 秒),如果满足条件,会先触发向 Amazon S3 交付数据。如果启用了 Apache Parquet 或动态分区,则 Amazon S3 目标缓冲区的大小以 MB 为单位,范围为 64MB 到 128MB,原定设置值为 128MB。请注意,有时数据传输至目标的时间会晚于数据摄入 Firehose 流的时间,在这种情况下,Kinesis Data Firehose 会自动增加缓冲区大小以赶上进度,并确保将所有数据传输至目标。
问:如果我选择压缩数据的话,缓冲区大小怎样计算?
缓冲区大小在压缩前应用。因此,如果您选择压缩数据,Amazon S3 存储桶中的对象大小可能小于您指定的缓冲区大小。
问:在创建 Firehose 流时需要指定的 Amazon Redshift 用户需要具备哪些权限?
该 Redshift 用户需要具备 Redshift INSERT 权限,以便将数据从您的 Amazon S3 存储桶复制到您的 Redshift 实例。
问:如果我的 Amazon Redshift 实例位于 VPC 中,我需要做些什么?
如果您的 Redshift 实例位于 VPC 中,则您需要在该 VPC 中取消阻止 Firehose IP 地址,以授予 Amazon Data Firehose 访问 Redshift 实例的权限。有关如何在 VPC 中取消阻止 IP 的信息,请参阅 Amazon Data Firehose 开发人员指南中的授予 Firehose 访问 Amazon Redshift 目标的权限。
问:选择 Amazon Redshift 作为目标时,为什么要提供 Amazon S3 存储桶?
对于 Redshift 目标,Amazon Data Firehose 会先将数据传输到您的 Amazon S3 存储桶,然后发出 Redshift COPY 命令,将数据从 S3 存储桶加载到您的 Redshift 实例。
问:单个 Firehose 流是否可以将数据传送到多个 Snowflake 表?
目前,单个 Firehose 流只能将数据传送到一张 Snowflake 表。要将数据传送到多个 Snowflake 表,您需要创建多个 Firehose 流。
问:Firehose 在向 Snowflake 流式传输数据时使用什么传送模式?
Firehose 对 Snowflake 使用仅一次传送语义。这意味着即使存在错误或重试,每条记录也只会传送到 Snowflake 一次。但是,仅一次传送并不能保证数据中不会出现端到端重复的内容,因为数据可能会被生产者或 ETL 管道的其他部分复制。
问:使用 Firehose 流式传输到 Snowflake 流的最小延迟是多少?
我们预计大多数数据流将在 5 秒内传送。
问:什么是 Amazon OpenSearch Service?
Amazon OpenSearch Service 可让您轻松执行交互式日志分析、实时应用程序监控、网站搜索等工作。OpenSearch 是一款开源的分布式搜索和分析套件,衍生自 Elasticsearch。Amazon OpenSearch Service 提供最新版本的 OpenSearch,支持 19 个版本的 Elasticsearch(1.5 到 7.10 版本),并支持由 OpenSearch Dashboards 和 Kibana(1.5 到 7.10 版本)提供的可视化功能。有关 Amazon OpenSearch 的更多信息,请单击此处。
问:Amazon OpenSearch Service 目标的索引转动是什么?
Firehose 可以基于一个时间段转动 Amazon OpenSearch Service 索引。您可以在创建 Firehose 流时配置此时间段。有关更多信息,请参阅 Amazon Data Firehose 开发人员指南中的针对 Amazon OpenSearch 目标的索引转动。
问:选择 Amazon OpenSearch Service 作为目标时,为什么要提供 Amazon S3 存储桶?
将数据加载到 Amazon OpenSearch Service 时,Firehose 会备份所有的数据,或者只备份交付失败的数据。要利用该功能并防止丢失任何数据,您需要提供一个备份 Amazon S3 存储桶。
问:创建 Firehose 流后,可以更改其配置吗?
您可以随时更改已创建的 Firehose 流的配置。为此,您可以使用 Firehose 控制台或 UpdateDestination 操作。更新配置时,Firehose 流仍保持 ACTIVE 状态,您可以继续向 Firehose 流发送数据。更新后的配置通常在数分钟内生效。
向某个 VPC 目标交付时,您可以更改目标端点 URL,只需确保新目标可在同一 VPC、子网和安全组中访问即可。如要更改 VPC、子网和安全组,您需要重新创建 Firehose 流。
问:我能否通过一个账户中的 Firehose 流将我的数据交付到另一个账户中的 Amazon OpenSearch Service 域 VPC 目标?
仅当 Firehose 和 Amazon OpenSearch Service 通过公共端点连接时,Firehose 传输才能传输到 Amazon OpenSearch Service 中的不同账户。
如果 Firehose 和 Amazon OpenSearch Service 通过私有 VPC 连接,则您的 Firehose 流和目标 Amazon OpenSearch Service 域 VPC 需要位于同一账户中。
问:我能否通过一个区域中的 Firehose 流将我的数据交付到另一个区域中的 Amazon OpenSearch Service 域 VPC 目标?
不能,您的 Firehose 流和目标 Amazon OpenSearch Service 域需要位于同一区域。
问:Firehose 多久向 Amazon OpenSearch 域交付一次数据?
向 Amazon OpenSearch Service 传输数据的频率取决于您为 Firehose 流配置的 OpenSearch 缓冲区大小和缓冲间隔值。Firehose 会缓冲传入的数据,然后再将其交付到 Amazon OpenSearch Service。您可以配置 OpenSearch 缓冲区大小(1MB 到 100MB)或缓冲间隔值(60 到 900 秒),如果满足条件,则会首先触发向 Amazon OpenSearch Service 交付数据。请注意,有时数据传输至目标的时间会晚于数据摄入 Firehose 流的时间,在这种情况下,Amazon Data Firehose 会自动增加缓冲区大小以赶上进度,并确保将所有数据传输至目标。
问:Amazon S3 存储桶中的清单文件夹是什么?
对于 Redshift 目标,Amazon Data Firehose 会生成清单文件,以便将 Amazon S3 对象批量加载到 Redshift 实例。清单文件夹用于存储 Firehose 生成的清单文件。
问:备份后的 OpenSearch 文档在 Amazon S3 存储桶中的表示形式是什么?
如果使用“所有文档”模式,Amazon Data Firehose 会基于 Firehose 流的缓冲配置合并多条传入记录,然后将其作为一个 S3 对象传输至 S3 存储桶。无论配置的是哪种备份模式,均可采用特定 JSON 格式将传输失败的文档传输至 S3 存储桶,这种格式会提供诸如错误代码和尝试传输时间之类的附加信息。有关更多信息,请参阅 Amazon Data Firehose 开发人员指南中的适用于 Amazon OpenSearch 目标的 Amazon S3 备份。
问:一个 Firehose 流可以向多个 Amazon S3 存储桶传输数据吗?
目前,一个 Firehose 流只能向一个 Amazon S3 存储桶传输数据。如果您需要将数据传输到多个 S3 存储桶,可通过创建多个 Firehose 流来实现。
问:一个 Firehose 流可以向多个 Amazon Redshift 实例或表传输数据吗?
目前,一个 Firehose 流只能向一个 Redshift 实例和一个表传输数据。如果您需要将数据传输到多个 Redshift 实例或表,可通过创建多个 Firehose 流来实现。
问:一个 Firehose 流可以向多个 Amazon OpenSearch Service 域或索引传输数据吗?
目前,一个 Firehose 流只能向一个 Amazon OpenSearch Service 域和一个索引传输数据。如果您需要将数据交付到多个 Amazon OpenSearch Service 域或索引,可通过创建多个 Firehose 流来实现。
问:Amazon Data Firehose 如何向我在 VPC 中的 Amazon OpenSearch Service 域交付数据?
当您启用 Firehose 向 VPC 中的 Amazon OpenSearch Service 域交付数据时,Amazon Data Firehose 将会在您的 VPC 中为您选择的每个子网创建一个或多个跨账户弹性网络接口(ENI)。Amazon Data Firehose 使用这些 ENI 向您的 VPC 交付数据。ENI 的数量会根据服务的需求自动扩展。
问:单个 Firehose 流是否可以将数据传送到多个 Apache Iceberg 表?
是的,单个 Firehose 数据流可以将数据传送到多个 Apache Iceberg 表。
问:Firehose 是否支持连接到不同账户或不同 AWS 区域中的 AWS Glue Data Catalog?
是的,Firehose 支持连接到不同账户或不同 AWS 区域中的 AWS Glue Data Catalog。
问:向 Apache Iceberg 表传输数据时,可以使用 Lambda 的数据转换功能吗?
是的,向 Apache Iceberg 表传输数据时,可以使用 Lambda 的数据转换功能。
Firehose 流的问题排查和管理
问:在向 Amazon Data Firehose 流发送数据时,为什么会受到限制?
默认情况下,每个 Firehose 流可消化多达 2000 笔事务/秒、5000 条记录/秒和 5MB/秒。您只需提交服务限值提升表即可方便地提高该限值。
问:为什么在 Amazon S3 存储桶、Amazon Redshift 表、Amazon OpenSearch Service 索引或 Splunk 集群中会看到重复记录?
Amazon Data Firehose 在进行数据交付时至少会使用一次语义。在极少数情况下(例如数据交付请求超时),如果上一个请求最终已通过,那么 Firehose 在重新交付时可能会引入重复内容。
问:如果向我的 Amazon S3 存储桶交付数据失败,会出现什么情况?
如果您的数据来源是 Direct PUT,并且向 Amazon S3 存储桶传输数据失败,Amazon Data Firehose 将每 5 秒重新尝试传输一次数据,最长持续时间为 24 小时。如果超过 24 小时最大保留期后该问题依然存在,那么 Amazon Data Firehose 将放弃这些数据。
如果您的数据来源是 Kinesis Data Streams,并且向 Amazon S3 存储桶传输数据失败,Amazon Data Firehose 将每 5 秒重新尝试传输一次数据,最长持续时间为在 Kinesis Data Streams 上配置的时间。
问:如果向我的 Amazon Redshift 实例传输数据失败,会出现什么情况?
如果向 Redshift 实例传输数据失败,Amazon Data Firehose 将每 5 分钟重新尝试传输一次数据,最长持续时间为 120 分钟。120 分钟后,Amazon Data Firehose 会跳过目前随时可供 COPY 的一批 S3 对象并移至下一批。有关跳过对象的信息将以清单文件形式交付到您 S3 存储桶中的错误文件夹中,以便您手动重新交付。有关如何使用清单文件手动 COPY 数据的信息,请参阅使用清单指定数据文件。
问:如果向我的 Amazon OpenSearch 域交付数据失败,会出现什么情况?
对于 Amazon OpenSearch Service 目标,您可在创建 Firehose 流时指定介于 0 到 7200 秒之间的重试持续时间。如果向 Amazon OpenSearch 域传输数据失败,Amazon Data Firehose 将在指定的时间段内重新尝试传输数据。重试时限过后,Amazon Data Firehose 会跳过当前这批数据并移至下一批。系统会将所跳过文档的详细信息交付至 S3 存储桶内 opensearch_failed 文件夹中,以便您手动回填时使用。
问:如果数据转换失败,会出现什么情况?
Firehose 尝试调用您的 Lambda 函数进行数据转换时,有可能出现两种类型的故障情景:
- 第一种类型的故障为,由于网络连接超时和达到 Lambda 调用限制等原因导致函数调用失败。在这种故障情景下,Firehose 默认重试调用三次,然后会跳过该特定批次的记录。跳过的记录会被视为处理失败的记录。您可以使用 CreateDeliveryStream 和 UpdateDeliveryStream API 来配置调用重试次数,范围在 0 到 300 之间。对于此类故障,您也可以使用 Firehose 的错误日志记录功能将调用错误发送到 CloudWatch Logs。有关更多信息,请参阅使用 Amazon CloudWatch Logs 进行监控。
- 当从 Lambda 函数返回的记录转换结果为“ProcessingFailed”时,会出现第二种类型的故障。Firehose 会将这些记录视为处理失败的记录。对于此类故障,您可以使用 Lambda 的日志记录功能将调用错误日志发送到 CloudWatch Logs。有关更多信息,请参阅访问 AWS Lambda 的 Amazon CloudWatch Logs。
对于以上两种类型的故障情景,处理失败的记录会传输到 S3 存储桶中的 processing_failed 文件夹中。
问:已交付 S3 对象的大小为什么会大于我在 Firehose 流配置中指定的缓冲区大小?
如果缓冲区大小条件先于缓冲间隔条件得到满足,则在大多数情况下,已交付 S3 对象的大小应等于指定的缓冲区大小。但是,如果数据交付至目标的时间晚于数据写入 Firehose 流的时间,Firehose 会动态增加缓冲区大小以赶上进度,并确保将所有数据交付至目标。在这种情况下,已交付 S3 对象的大小可能会大于指定的缓冲区大小。
问:Amazon S3 存储桶中的错误文件夹是什么?
该错误文件夹用于存储一些清单文件,后者包含无法加载到 Redshift 实例的 S3 对象的信息。您可以通过 Redshift COPY 命令手动重新加载这些对象。有关如何使用清单文件手动 COPY 数据的信息,请参阅使用清单指定数据文件。
问:Amazon S3 存储桶中的 opensearch_failed 文件夹是什么?
opensearch_failed 文件夹存储未能加载到您的 Amazon OpenSearch 的文档。如果数据传输到我的 Amazon OpenSearch 域失败会发生什么情况?您可以为这些文档手动重新编制索引,以便重新交付。
问:Amazon S3 存储桶中的 processing_failed 文件夹是什么?
processing_failed 文件夹用于存储 AWS Lambda 函数中转换失败的记录。您可以手动重新处理这些记录。
问:如何监控 Amazon Data Firehose 流的运行和性能?
Firehose 控制台显示关键的运行和性能指标,如传入的数据量、交付的数据量等。Amazon Data Firehose 还与 Amazon CloudWatch 指标集成,以便您可为 Firehose 流收集、查看和分析指标。有关 Amazon Data Firehose 指标的更多信息,请参阅 Amazon Data Firehose 开发人员指南中的使用 Amazon CloudWatch 指标进行监控。
问:如何监控 Amazon Data Firehose 流的数据转换失败和交付失败?
Amazon Data Firehose 与 Amazon CloudWatch Logs 集成,因此您可以在数据转换失败或交付失败时查看特定的错误日志。创建 Firehose 流时,您可以启用错误日志记录。有关更多信息,请参阅 Amazon Data Firehose 开发人员指南中的使用 Amazon CloudWatch Logs 进行监控。
问:如何管理和控制对 Amazon Data Firehose 流的访问权限?
Amazon Data Firehose 与 AWS Identity and Access Management 服务集成,后者让您能够安全控制对 AWS 服务和用户资源的访问权限。例如,您可以创建仅允许特定用户或组向 Firehose 流添加数据的策略。有关流式传输访问管理和控制的更多信息,请参阅使用 Amazon Data Firehose 控制访问。
问:如何记录针对 Amazon Data Firehose 流的 API 调用,以便用于安全分析和运行故障排除?
Amazon Data Firehose 与 AWS CloudTrail 服务集成,后者可记录您账户的 AWS API 调用并向您提供日志文件。有关 API 调用日志记录的更多信息和支持的 Amazon Data Firehose API 操作的列表,请参阅使用 AWS CloudTrail 记录 Amazon Data Firehose API 调用。
定价与计费
问:Firehose 是否在 AWS Free Tier 中提供?
否。Firehose 当前未在 AWS Free Tier 中提供。AWS Free Tier 是一项提供了免费试用一系列 AWS 服务的计划。有关更多详细信息,请参阅 AWS Free Tier。
问:Firehose 的费用是多少?
Firehose 采用按实际使用量付费的简单定价方式。这里不存在预付成本或最低费用,您仅需为使用的资源付费。Amazon Data Firehose 定价基于 Firehose 接收的数据量(GB),对于作为源的 Direct PUT 和 Kinesis Data Streams,每条记录向上取整到最接近的 5KB。对于作为源的公开日志,定价基于 Firehose 提取的数据量(GB)。有关 Amazon Data Firehose 的更多信息,请参阅 Amazon Data Firehose 定价。
问:使用 PutRecordBatch 操作向 Amazon Data Firehose 发送数据时,如何计算向上取整 5KB?
向上取整 5KB 在记录级别而不是 API 操作级别计算。例如,如果您的 PutRecordBatch 调用包含两条 1KB 的记录,则将该调用的数据量计为 10KB。(每条记录 5KB)
问:Firehose 的成本包含 Amazon S3、Amazon Redshift、Amazon OpenSearch Service 和 AWS Lambda 的成本吗?
不包含。您需要单独支付使用 Amazon S3、Amazon Redshift、Amazon OpenSearch Service 和 AWS Lambda 的费用(包括存储成本和请求成本)。有关更多信息,请参阅 Amazon S3 定价、Amazon Redshift 定价、Amazon OpenSearch Service 定价和 AWS Lambda 定价。
服务水平协议
问:Amazon Data Firehose SLA 提供什么保证?
我们的 Amazon Data Firehose SLA 保证 Amazon Data Firehose 的月度正常运行时间百分比至少达到 99.9%。
问:怎样确定我是否有资格获得 SLA 服务抵扣?
对于您运行任务所在的可用区,如果同一个区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.9%,那么您就有资格获得 Amazon Data Firehose SLA 规定的 Amazon Data Firehose SLA 服务抵扣。
如需 SLA 的所有条款与条件的完整详细信息,以及如何提交索赔的详细信息,请参阅 Amazon Data Firehose SLA 详细信息页面。