一般和串流 ETL 概念

问:什么是串流 ETL?

串流 ETL 是指实时数据从一个地方到另一个地方的处理和移动。ETL 是数据库函数提取 (extract)、转换 (transform) 和加载 (load) 的缩写。提取是指从某个源收集数据。转换是指对该数据执行的任何处理。加载是指将处理后的数据发送到目标,如仓库、数据湖或分析工具。

问:什么是 Amazon Kinesis Data Firehose?

Kinesis Data Firehose 是一种串流 ETL 解决方案。这是将串流数据加载到数据存储和分析工具的最简单方式。其功能包括采集、转换串流数据,并将其加载到 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 和 Splunk,让您可以借助正在使用的现有业务情报工具和控制面板,进行近乎实时的分析。这是一项完全托管的服务,可以自动扩展以匹配数据吞吐量,并且无需持续管理。它还可以在加载数据前对其进行批处理、压缩和加密,从而最大程度地减少目的地使用的存储量,同时提高安全性。

问:什么是 Kinesis Data Firehose 的源?

源是指您的串流数据连续生成和捕获的位置。例如,源可以是 Amazon EC2 实例上运行的日志服务器、移动设备上运行的应用程序或 IoT 设备上的传感器。您可以使用以下方式将源连接到 Kinesis Data Firehose 1) Amazon Kinesis Data Firehose API,使用的是 AWS SDK for Java.NETNode.jsPythonRuby。2) Kinesis 数据流,其中 Kinesis Data Firehose 可以轻松地从现有的 Kinesis 数据流读取数据,并将其加载到 Kinesis Data Firehose 目标。3) AWS 本机支持的服务,如 AWS Cloudwatch、AWS EventBridge、AWS IOT 或 AWS Pinpoint。有关完整列表,请参阅 Amazon Kinesis Data Firehose 开发人员指南。4) Kinesis Agents,这是一种独立的 Java 软件应用程序,可连续监控一组文件,并向流式传输发送新数据。5) Fluentbit,这是一种开源日志处理器和转发器。6) AWS Lambda,这是一项无服务器计算服务,让您无需预置或管理服务器即可运行代码。您可以使用写入 Lambda 函数根据触发的事件将流量从 S3 或 DynamoDB 发送到 Kinesis Data Firehose。

问:什么是 Kinesis Data Firehose 的目标?

目标是数据将交付到的数据存储。Kinesis Data Firehose 当前支持将 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service、Splunk、Datadog、NewRelic、Dynatrace、Sumologic、LogicMonitor、MongoDB 和 HTTP 终端节点作为目标位置。

问:Kinesis Data Firehose 可代我管理哪些内容?

Kinesis Data Firehose 能够管理将您的数据捕获并加载到 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 或 Splunk 所需的所有底层基础设施、存储、联网和配置。您不必操心预置、部署、持续维护硬件、软件,或编写任意其他应用程序来管理这一流程。而且,Kinesis Data Firehose 还能弹性扩展,无需任何人工干预,不产生相关的开发人员开销。此外,Kinesis Data Firehose 还可在一个 AWS 区域的三个设施之间同步复制数据,在将数据传输到目标的同时,提供高可用性和持久性。

问:如何使用 Kinesis Data Firehose?

注册 Amazon Web Services 后,您可以按照以下步骤开启使用 Kinesis Data Firehose:

  • 通过 Firehose 控制台CreateDeliveryStream 操作创建 Kinesis Data Firehose 传输流。您可以选择在传输流中配置 AWS Lambda 函数,以便在加载原始数据之前进行准备和转换。
  • 使用 Amazon Kinesis AgentFirehose API 配置数据创建器,以持续地向传输流发送数据。
  • Firehose 会自动和持续地将数据加载到您指定的目标。

问:什么是 Kinesis Data Firehose 的传输流?

传输流是 Kinesis Data Firehose 的基础实体。您通过创建传输流然后向其发送数据的方式来使用 Firehose。您可以通过 Firehose 控制台CreateDeliveryStream 操作创建 Kinesis Data Firehose 传输流。有关更多信息,请参阅创建传输流

问:什么是 Kinesis Data Firehose 的记录?

记录是您的数据创建器发送到传输流的重要数据。记录的最大大小(进行 Base64 编码前)为 1024KB。

问:Kinesis Data Firehose 有哪些限制?

有关限制的信息,请参阅开发人员指南中的 Amazon Kinesis Data Firehose 限制

数据源

问:我可以使用哪些编程语言或平台访问 Kinesis Data Firehose API?

Kinesis Data Firehose API 在 Amazon Web Services 软件开发工具包中可用。有关适用于 Amazon Web Services 软件开发工具包的编程语言或平台的列表,请参阅用于 Amazon Web Services 的工具

问:什么是 Amazon Kinesis 代理?

Kinesis Agent 是一款预构建的 Java 应用程序,可提供简单的方法来收集数据并将其发送到传输流。您可以在基于 Linux 的服务器环境(如 Web 服务器、日志服务器和数据库服务器)上安装此代理。代理监控特定文件并持续发送数据到传输流。目前,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 的 PutRecordPutRecordBatch 操作向 Kinesis Data Firehose 传输流添加数据。PutRecord 操作允许 API 调用内的单个数据记录,而 PutRecordBatch 操作允许 API 调用内的多个数据记录。有关更多信息,请参阅 PutRecordPutRecordBatch

问:如何从 Kinesis 数据流向 Kinesis Data Firehose 传输流添加数据?

当通过 AWS 控制台或 Firehose API 创建或更新传输流时,您可以配置一个 Kinesis 数据流作为传输流的源。配置完毕后,Firehose 将自动从 Kinesis 数据流中读取数据,并将数据加载到指定目的地。

问:Kinesis Data Firehose 从 Kinesis 流式传输中读取数据的频率如何?
Kinesis Data Firehose 每秒就会在每个 Kinesis 分区中调用一次 Kinesis Data Streams GetRecords()。

问:将 Kinesis 数据流配置为传输流的源时,Kinesis Data Firehose 从哪里读取数据?

将 Kinesis 数据流配置为传输流的源时,Kinesis Data Firehose 将从 Kinesis 数据流的 LATEST 位置开启读取数据。有关 Kinesis 数据流位置的更多信息,请参阅 Kinesis Data Streams Service API 参考中的 GetShardIterator

问:可以将 Kinesis 数据流配置为多个 Kinesis Data Firehose 传输流的源吗?

可以。但请注意,来自 Kinesis Data Firehose 的 GetRecords() 调用是根据 Kinesis 分区的总节流限制计数的,因此您需要连同其他 Kinesis 应用程序一起来规划交付流,以防受到限制。有关更多信息,请参阅 Kinesis Data Streams 开发人员指南中的 Kinesis Data Streams 限制

问:将 Kinesis 数据流配置为源后,我还能继续通过 Kinesis Agent 或 Firehose 的 PutRecord 和 PutRecordBatch 操作将数据添加至传输流吗?

不可以。将 Kinesis 数据流配置为 Kinesis Data Firehose 传输流的源后,Firehose 的 PutRecord 和 PutRecordBatch 操作将被禁用。您应通过 Kinesis Data Streams 的 PutRecord 和 PutRecords 操作将数据添加至 Kinesis 数据流。

问:如何从 AWS IoT 添加数据到传输流?

您可以通过创建将事件发送至交付流的 AWS IoT 操作,来将数据添加到交付流。有关更多信息,请参阅 Kinesis Data Firehose 开发人员指南中的使用 AWS IoT 写入 Amazon Kinesis Data Firehose

问:如何从 CloudWatch Logs 添加数据到传输流?

您可以通过创建将事件发送至传输流的 CloudWatch Logs 订阅筛选条件,来将数据添加到 Kinesis Data Firehose 传输流。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的使用 CloudWatch Logs 订阅筛选条件

问:如何从 CloudWatch Events 添加数据到 Kinesis Data Firehose 传输流?

您可以通过创建将传输流作为目标的 CloudWatch Events 规则,从 CloudWatch Events 添加数据到 Kinesis Data Firehose 传输流。有关更多信息,请参阅 Kinesis Data Firehose 开发人员指南中的使用 CloudWatch Events 写入 Amazon Kinesis Data Firehose

问:如何从 AWS Eventbridge 添加数据到 Amazon Kinesis Data Firehose 传输流?

您可以从 AWS EventBridge 控制台添加数据到 Kinesis Data Firehose 传输流。有关更多信息,请参阅 AWS EventBridge 文档

问:可以使用哪种类型的加密?

Kinesis Data Firehose 允许您在将数据交付至 Amazon S3 存储桶后加密数据。在创建传输流时,您可以选择使用您拥有的 AWS Key Management Service (KMS) 密钥加密数据。有关 KMS 的更多信息,请参阅 AWS Key Management Service

问:在创建传输流时需要指定的 IAM 角色是什么?

Kinesis Data Firehose 承担您指定的 IAM 角色,以访问 Amazon S3 存储桶和 Amazon Elasticsearch 域等资源。有关更多信息,请参阅 Kinesis Data Firehose 开发人员指南中的使用 Kinesis Data Firehose 控制访问

数据转换和格式转换

问:如何在 Kinesis Data Firehose 中准备和转换原始数据?

Kinesis Data Firehose 支持内置的数据格式转换,可以将来自原始数据或 Json 的数据转换为目标数据存储所需的格式(如 Apache Parquet 和 Apache ORC),无需构建自己的数据处理管道。Kinesis Data Firehose 还允许您使用静态或动态定义的键(如“customer_id”或“transaction_id”),在交付给 S3 之前动态划分串流数据。Kinesis Data Firehose 通过这些键对数据进行分组,并交付到键唯一的 S3 前缀中,使您能够更轻松地使用 Athena、EMR 和 Redshift Spectrum 在 S3 中执行高性能、成本高效的分析。

除了 Amazon Kinesis Data Firehose 中内置的格式转换选项外,您还可以在将传输流中的传入原始数据加载到目标之前,使用 AWS Lambda 函数准备和转换这些原始数据。您可以在创建新的传输流或编辑现有传输流时配置一个 AWS Lambda 函数,用于数据转换。Amazon 已经创建了多个 Lambda 蓝图,您可以从中选择快速启动。有关完整列表,请参阅 Amazon Kinesis Data Firehose 开发人员指南。

问:可以使用什么压缩格式?

使用 Amazon Kinesis Data Firehose,您可以在向 Amazon S3 交付数据前压缩数据。该服务目前支持 GZIP、ZIP 和 SNAPPY 压缩格式。如果将数据进一步加载到 Amazon Redshift,则仅支持 GZIP 格式。

问:当使用 CloudWatch Logs 订阅功能时,如何执行压缩?

您可以使用 CloudWatch Logs 订阅功能将数据从 CloudWatch Logs 流式传输到 Kinesis Data Firehose。CloudWatch Logs 的所有日志事件已经采用 gzip 格式进行压缩,因此您应确保 Firehose 的压缩配置为未压缩,以避免重复压缩。有关 CloudWatch Logs 订阅功能的更多信息,请参阅 Amazon CloudWatch Logs 用户指南中的 Amazon Kinesis Data Firehose 订阅筛选条件

问:如何将准备好并且已经转换的数据从 AWS Lambda 函数返回到 Amazon Kinesis 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:Base64 编码之后的转换后数据负载。

问:什么是错误日志记录?

如果您使用 Lambda 进行数据转换,Firehose 可以将任何 Lambda 调用和数据传输错误记录到 Amazon CloudWatch Logs,以便您在 Lambda 调用失败或数据传输失败时查看特定的错误日志。有关更多信息,请参阅使用 Amazon CloudWatch Logs 进行监控

问:什么是源记录备份?

如果您使用 Lambda 进行数据转换,则可以启用源记录备份,Amazon Kinesis Data Firehose 会将未转换的传入数据交付至单独的 S3 存储桶。您可以指定要添加到 Firehose 生成的“YYYY/MM/DD/HH”UTC 时间前缀之前的其他前缀。

Amazon S3 内置的数据转换

问:何时应使用 Kinesis Data Firehose 动态分区?

Kinesis Data Firehose 动态分区消除了在源位置或存储数据后手动分区的复杂性和延迟,并支持查询优化数据集,以加快分析。这使得数据集可立即供分析工具使用,以高效运行查询,并增强对数据的细粒度访问控制。例如,营销自动化客户可以根据客户 id 动态划分数据,允许使用客户特定的查询,以查询优化数据集,并更快交付结果。IT 运营或安全监控客户可以根据日志中嵌入的事件时间戳创建分组,以便查询优化数据集,并更快地获得结果。此功能与 Amazon Kinesis Data Firehose 现有的 JSON 到 parquet 转换功能相结合,使 Amazon Kinesis Data Firehose 成为 S3 理想的串流 ETL 选项。

问:如何使用 Kinesis Data Firehose 设置动态分区?

可以通过 AWS 管理控制台、CLI 或 SDK 设置 Kinesis Data Firehose 数据分区功能。创建或更新 Kinesis Data Firehose 传输流时,选择 Amazon S3 作为传输流的传输目标,并启用动态分区。您可以指定键,或创建表达式在运行时进行计算,以定义用于分区的键。例如,您可以在传入的流式传输中选择一个数据字段,如客户 id,并定义一个 S3 前缀表达式,如 customer_id=!{partitionKey:customer_id}/,在运行时将根据摄取的记录进行评估,以定义将记录传输到哪个 S3 前缀。

问:通过动态分区和分区键,可以进行什么样的转换和数据处理?

当您将数据写入 Amazon S3 时,Kinesis Data Firehose 支持开箱即用的 parquet/orc 转换。Kinesis Data Firehose 还集成了 Lambda 函数,因此您还可以自行编写转换代码。Kinesis Data Firehose 还内置了从 JSON 格式的记录中提取关键数据字段的支持。Kinesis Data Firehose 还支持 JQ 解析语言,以便对这些分区键启用转换。要了解详情,请参阅 Kinesis Data Firehose 开发人员指南。

数据传输和目标

问:能否在 S3 存储桶中保留所有原始数据的副本?

能。Kinesis Data Firehose 可以在将转换后的记录传输到目标的同时,将所有未转换的记录备份到您的 S3 存储桶。您可以在创建或更新传输流时启用源记录备份。

问:Kinesis Data Firehose 多久向 Amazon S3 存储桶交付一次数据?

向 Amazon S3 传输数据的频率取决于您为传输流配置的 S3 缓冲区大小和缓冲间隔值。Kinesis Data Firehose 会先缓冲传入数据,然后再将其交付至 Amazon S3。您可以配置 S3 缓冲区大小(1MB 到 128MB)或缓冲间隔值(60 到 900 秒),如果满足条件,会先触发向 Amazon S3 交付数据。如果启用了 Apache Parquet 或动态分区,则 Amazon S3 目标缓冲区的大小以 MB 为单位,范围为 64MB 到 128MB,原定设置值为 128MB。请注意,有时数据传输至目标的时间会晚于数据摄入传输流的时间,在这种情况下,Kinesis Data Firehose 会自动增加缓冲区大小以赶上进度,并确保将所有数据传输至目标。

问:如果我选择压缩数据的话,缓冲区大小怎样计算?

缓冲区大小在压缩前应用。因此,如果您选择压缩数据,Amazon S3 存储桶中的对象大小可能小于您指定的缓冲区大小。

问:在创建传输流时需要指定的 Amazon Redshift 用户需要具备哪些权限?

该 Amazon Redshift 用户需要具备 Redshift INSERT 权限,以便将数据从您的 Amazon S3 存储桶复制到您的 Redshift 集群。

问:如果我的 Amazon Redshift 集群位于 VPC 中,我需要做些什么?

如果您的 Amazon Redshift 集群位于 VPC 中,则您需要在该 VPC 中取消阻止 Firehose IP 地址,以授予 Amazon Kinesis Data Firehose 访问 Redshift 集群的权限。有关如何在 VPC 中取消阻止 IP 的信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南中的授予 Firehose 访问 Amazon Redshift 目标的权限

问:选择 Amazon Redshift 作为目标时,为什么要提供 Amazon S3 存储桶?

对于 Amazon Redshift 目标,Amazon Kinesis Data Firehose 会先将数据交付到您的 Amazon S3 存储桶,然后发出 Redshift COPY 命令将数据从 S3 存储桶加载到您的 Redshift 集群。

问:Amazon Elasticsearch Service 目标的索引转动是什么?

Kinesis Data Firehose 可以基于一个时间段转动 Amazon Elasticsearch Service 索引。您可以在创建传输流时配置此时间段。有关更多信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南中的针对 Amazon Elasticsearch 目标的索引转动

问:选择 Amazon Elasticsearch Service 作为目标时,为什么要提供 Amazon S3 存储桶?

将数据加载到 Amazon Elasticsearch Service 时,Kinesis Data Firehose 会备份所有的数据,或者只备份交付失败的数据。要利用该功能并防止丢失任何数据,您需要提供一个备份 Amazon S3 存储桶。

问:创建交付流后,可以更改其配置吗?

您可以随时更改已创建的交付流的配置。为此,您可以使用 Firehose 控制台UpdateDestination 操作。更新配置时,交付流仍保持 ACTIVE 状态,您可以继续向交付流发送数据。更新后的配置通常在数分钟内生效。

向某个 VPC 目标交付时,您可以更改目标终端节点 URL,只需确保新目标可在同一 VPC、子网和安全组中访问即可。如要更改 VPC、子网和安全组,您需要重新创建 Firehose 传输流。

问:我能否通过一个账户中的 Kinesis Data Firehose 传输流将我的数据交付到另一个账户中的 Amazon Elasticsearch Service 域 VPC 目标?

不能,您的 Kinesis Data Firehose 传输流和目标 Amazon Elasticsearch Service 域需要位于同一账户中。

问:我能否通过一个区域中的 Kinesis Data Firehose 传输流将我的数据交付到另一个区域中的 Amazon Elasticsearch Service 域 VPC 目标?

不能,您的 Kinesis Data Firehose 传输流和目标 Amazon Elasticsearch Service 域需要位于同一区域。

问:Kinesis Data Firehose 多久向 Amazon Elasticsearch 域交付一次数据?

向 Amazon Elasticsearch Service 传输数据的频率取决于您为传输流配置的 Elasticsearch 缓冲区大小和缓冲间隔值。Firehose 会缓冲传入的数据,然后再将其交付到 Amazon Elasticsearch Service。您可以配置 Elasticsearch 缓冲区大小(1MB 到 100MB)或缓冲间隔值(60 到 900 秒),如果满足条件,则会首先触发向 Amazon Elasticsearch Service 交付数据。请注意,有时数据传输至目标的时间会晚于数据摄入传输流的时间,在这种情况下,Amazon Kinesis Data Firehose 会自动增加缓冲区大小以赶上进度,并确保将所有数据传输至目标。

问:Amazon S3 存储桶中的清单文件夹是什么?
对于 Amazon Redshift 目标,Amazon Kinesis Data Firehose 会生成清单文件,以便将 Amazon S3 对象批量加载到 Redshift 集群。清单文件夹用于存储 Firehose 生成的清单文件。

问:备份后的 Elasticsearch 文档在 Amazon S3 存储桶中的表示形式是什么?
如果使用“所有文档”模式,Amazon Kinesis Data Firehose 会基于传输流的缓冲配置合并多条传入记录,然后将其作为一个 S3 对象传输至 S3 存储桶。无论配置的是哪种备份模式,均可采用特定 JSON 格式将交付失败的文档交付至 S3 存储桶,这种格式会提供诸如错误代码和尝试交付时间之类的附加信息。有关更多信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南中的适用于 Amazon ES 目标的 Amazon S3 备份

问:一个交付流可以向多个 Amazon S3 存储桶交付数据吗?

目前,一个交付流只能向一个 Amazon S3 存储桶交付数据。如果您需要将数据交付到多个 S3 存储桶,可通过创建多个交付流来实现。

问:一个交付流可以向多个 Amazon Redshift 集群或表交付数据吗?

目前,一个交付流只能向一个 Amazon Redshift 集群和一个表交付数据。如果您需要将数据传输到多个 Redshift 集群或表,可通过创建多个传输流来实现。

问:一个传输流可以向多个 Amazon Elasticsearch Service 域或索引传输数据吗?

目前,一个传输流只能向一个 Amazon Elasticsearch Service 域和一个索引传输数据。如果您需要将数据交付到多个 Amazon Elasticsearch Service 域或索引,可通过创建多个传输流来实现。

问:Amazon Kinesis Data Firehose 如何向我在 VPC 中的 Amazon Elasticsearch Service 域交付数据?

当您启用 Kinesis Data Firehose 向 VPC 中的 Amazon Elasticsearch Service 域交付数据时,Amazon Kinesis Data Firehose 将会在您的 VPC 中为您选择的每个子网创建一个或多个跨账户弹性网络接口 (ENI)。Amazon Kinesis Data Firehose 使用这些 ENI 向您的 VPC 交付数据。ENI 的数量会根据服务的需求自动扩展。

传输流的问题排查和管理

问:在向 Amazon Kinesis Data Firehose 交付流发送数据时,为什么会受到限制?

默认情况下,每个交付流可消化多达 2000 笔事务/秒、5000 条记录/秒和 5MB/秒。您只需提交服务限值提升表即可方便地提高该限值。

问:为什么在 Amazon S3 存储桶、Amazon Redshift 表、Amazon Elasticsearch Service 索引或 Splunk 集群中会看到重复记录?

Amazon Kinesis Data Firehose 在进行数据交付时至少会使用一次语义。在极少数情况下(例如数据交付请求超时),如果上一个请求最终已通过,那么 Firehose 在重新交付时可能会引入重复内容。

问:如果向我的 Amazon S3 存储桶交付数据失败,会出现什么情况?

如果向 Amazon S3 存储桶交付数据失败,Amazon Kinesis Data Firehose 将每 5 秒重新尝试交付一次数据,最长持续时间为 24 小时。如果超过 24 小时最大保留期后该问题依然存在,那么它将放弃这些数据。

问:如果向我的 Amazon Redshift 集群交付数据失败,会出现什么情况?

如果向 Amazon Redshift 集群交付数据失败,Amazon Kinesis Data Firehose 将每 5 分钟重新尝试交付一次数据,最长持续时间为 120 分钟。120 分钟后,Amazon Kinesis Data Firehose 会跳过目前随时可供 COPY 的一批 S3 对象并移至下一批。有关跳过对象的信息将以清单文件形式交付到您 S3 存储桶中的错误文件夹中,以便您手动重新交付。有关如何使用清单文件手动 COPY 数据的信息,请参阅使用清单指定数据文件

问:如果向我的 Amazon Elasticsearch 域交付数据失败,会出现什么情况?

对于 Amazon Elasticsearch Service 目标,您可在创建交付流时指定介于 0 到 7200 秒之间的重试持续时间。如果向 Amazon ES 域交付数据失败,Amazon Kinesis Data Firehose 将在指定的时间段内重新尝试交付数据。重试时限过后,Amazon Kinesis Data Firehose 会跳过当前这批数据并移至下一批。系统会将所跳过文档的详细信息交付至 S3 存储桶内 elasticsearch_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 对象的大小为什么会大于我在交付流配置中指定的缓冲区大小?

如果缓冲区大小条件先于缓冲间隔条件得到满足,则在大多数情况下,已交付 S3 对象的大小应等于指定的缓冲区大小。但是,如果数据交付至目标的时间晚于数据写入交付流的时间,Firehose 会动态增加缓冲区大小以赶上进度,并确保将所有数据交付至目标。在这种情况下,已交付 S3 对象的大小可能会大于指定的缓冲区大小。

问:Amazon S3 存储桶中的错误文件夹是什么?

该错误文件夹用于存储一些清单文件,后者包含无法加载到 Amazon Redshift 集群的 S3 对象的信息。您可以通过 Redshift COPY 命令手动重新加载这些对象。有关如何使用清单文件手动 COPY 数据的信息,请参阅使用清单指定数据文件

问:Amazon S3 存储桶中的 elasticsearch_failed 文件夹是什么?

elasticsearch_failed 文件夹用于存储无法加载到 Amazon Elasticsearch 域的文档。您可以为这些文档手动重新编制索引,以便重新交付。

问:Amazon S3 存储桶中的 processing_failed 文件夹是什么?

processing_failed 文件夹用于存储 AWS Lambda 函数中转换失败的记录。您可以手动重新处理这些记录。

问:如何监控 Amazon Kinesis Data Firehose 交付流的运行和性能?

Firehose 控制台显示关键的运行和性能指标,如传入的数据量、交付的数据量等。Amazon Kinesis Data Firehose 还与 Amazon CloudWatch 指标集成,以便您可为交付流收集、查看和分析指标。有关 Amazon Kinesis Data Firehose 指标的更多信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南中的使用 Amazon CloudWatch 指标进行监控

问:如何监控 Amazon Kinesis Data Firehose 交付流的数据转换失败和交付失败?

Amazon Kinesis Data Firehose 与 Amazon CloudWatch Logs 集成,因此您可以在数据转换失败或交付失败时查看特定的错误日志。创建交付流时,您可以启用错误日志记录。有关更多信息,请参阅 Amazon Kinesis Data Firehose 开发人员指南中的使用 Amazon CloudWatch Logs 进行监控

问:如何管理和控制对 Amazon Kinesis Data Firehose 交付流的访问权限?

Amazon Kinesis Data Firehose 与 AWS Identity and Access Management 服务集成,后者让您能够安全控制对 AWS 服务和用户资源的访问权限。例如,您可以创建仅允许特定用户或组向 Firehose 交付流添加数据的策略。有关流式传输访问管理和控制的更多信息,请参阅使用 Amazon Kinesis Data Firehose 控制访问

问:如何记录针对 Amazon Kinesis Data Firehose 交付流的 API 调用,以便用于安全分析和运行故障排除?

Amazon Kinesis Data Firehose 与 AWS CloudTrail 服务集成,后者可记录您账户的 AWS API 调用并向您提供日志文件。有关 API 调用日志记录的更多信息和支持的 Amazon Kinesis Data Firehose API 操作的列表,请参阅使用 AWS CloudTrail 记录 Amazon Kinesis Data Firehose API 调用

定价与计费

问:AWS 免费套餐中是否提供 Kinesis Data Firehose?

否。Kinesis Data Firehose 当前不在 AWS 免费套餐中提供。AWS 免费套餐是一项提供了免费试用一系列 AWS 服务的计划。有关更多详细信息,请参阅 AWS 免费套餐

问:Kinesis Data Firehose 的成本是多少?

Kinesis Data Firehose 使用简单的按需付费定价结构。这里不存在预付成本或最低费用,您仅需为使用的资源付费。Amazon Kinesis Data Firehose 定价基于 Firehose 接收的数据量 (GB),每条记录向上取整到最接近的 5KB。有关 Amazon Kinesis Data Firehose 费用的更多信息,请参阅 Amazon Kinesis Data Firehose 定价

问:使用 PutRecordBatch 操作向 Amazon Kinesis Data Firehose 发送数据时,如何计算向上取整 5KB?

向上取整 5KB 在记录级别而不是 API 操作级别计算。例如,如果您的 PutRecordBatch 调用包含两条 1KB 的记录,则将该调用的数据量计为 10KB。(每条记录 5KB)

问:Kinesis Data Firehose 的成本包含 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 和 AWS Lambda 的成本吗?

不包含。您需要单独支付使用 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 和 AWS Lambda 的费用(包括存储成本和请求成本)。有关更多信息,请参阅 Amazon S3 定价Amazon Redshift 定价Amazon Elasticsearch Service 定价AWS Lambda 定价

服务等级协议

问:Amazon Kinesis Data Firehose 提供什么保障?

我们的 Amazon Kinesis Data Firehose SLA 保证 Amazon Kinesis Data Firehose 的月度正常运行时间百分比至少达到 99.9%。

问:怎样确定我是否有资格获得 SLA 服务抵扣?

对于您运行任务所在的可用区,如果同一个区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.9%,那么您就有资格获得 Amazon Kinesis Data Firehose SLA 规定的 Amazon Kinesis Data Firehose SLA 服务抵扣。

如需 SLA 的所有条款与条件的完整详细信息,以及如何提交索赔的详细信息,请参阅 Amazon Kinesis Data Firehose SLA 详细信息页面

了解有关 Amazon Kinesis Data Firehose 定价的更多信息

访问定价页面
准备好开始使用了吗?
注册
还有更多问题?
联系我们