Amazon Kinesis Data Firehose - Amazon Kinesis Data Firehose
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon Kinesis Data Firehose

Kinesis Data Firehose 可以调用 Lambda 函数来转换传入源数据并将转换后的数据传送到目标。在创建传输流时,您可以启用 Kinesis Data Firehose 数据转换。

数据转换流

当你启用 Kinesis Data Firehose 数据转换时,Kinesis Data Firehose 会缓冲传入的数据。缓冲提示范围介于 0.2 MB 和最多 3MB 之间。除 Splunk 外,所有目标的默认缓冲提示均为 1MB。对于 Splunk,默认缓冲提示为 256 KB。(要调整缓冲区大小,请使用ProcessingConfiguration带有 APIProcessorParameterBufferSizeInMBs。) 然后,Kinesis Data Firehose 使用每个缓冲批次异步调用指定的 Lambda 函数Amazon Lambda同步调用模式。从 Lambda 发送到 Kinesis Data Firehose。然后,当达到指定的目标缓冲大小或缓冲间隔时(以先发生者为准),Kinesis Data Firehose 将其发送到目标。

重要

Lambda 同步调用模式的请求和响应的负载大小限制均为 6 MB。确保用于向函数发送请求的缓冲大小小于或等于 6 MB,并且函数返回的响应也不超过 6 MB。

数据转换和状态模型

来自 Lambda 的所有转换记录都必须包含以下参数,否则 Kinesis Data Firehose 会拒绝这些参数并将其视为数据转换失败。

recordId

在调用期间,记录 ID 从 Kinesis Data Firehose 传递给 Lambda。转换后的记录必须包含相同记录 ID。原始记录的 ID 和转换记录的 ID 之间如果有不匹配,将被视为数据转换失败。

result

记录的数据转换的状态。可能的值为:Ok(记录成功转换)、Dropped(处理逻辑故意丢弃记录)和 ProcessingFailed(记录无法转换)。如果记录的状态为Ok要么Dropped,Kinesis Data Firehose 认为它已成功处理。否则,Kinesis Data Firehose 会认为其处理不成功。

data

转换后的数据负载 (使用 base64 编码之后)。

Lambda 蓝图

您可以使用一些蓝图来创建用于数据转换的 Lambda 函数。其中一些蓝图位于 Amazon Lambda 控制台中,另一些位于中 Amazon Serverless Application Repository。

查看 Amazon Lambda 控制台中提供的蓝图

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Lambda 控制台:https://console.aws.amazon.com/lambda/

  2. 选择 Create function (创建函数),然后选择 Use a blueprint (使用蓝图)

  3. 蓝图字段,搜索关键字firehose来查找 Kinesis Data Firehose Lambda 蓝图。

查看 Amazon Serverless Application Repository 中提供的蓝图

  1. 转到 Amazon Serverless Application Repository

  2. 选择浏览所有应用程序.

  3. 应用程序 字段中,搜索关键字 firehose

您还可以在不使用蓝图的情况下创建 Lambda 函数。请参阅开始使用AmazonLambda.

数据转换失败处理

如果您的 Lambda 函数调用由于网络超时或已达到 Lambda 调用限制而失败,Kinesis Data Firehose 默认会重试调用三次。如果调用不成功,Kinesis Data Firehose 就会跳过那批记录。跳过的记录会被视为未被成功处理的记录。您可以使用以下命令指定或覆盖重试选项CreateDeliveryStream要么UpdateDestinationAPI。对于此类故障,您可以将调用错误记录到亚马逊 CloudWatch 日志。有关更多信息,请参阅 使用 CloudWatch 日志监控 Kinesis Data Firehose

如果记录的数据转换状态为ProcessingFailed,Kinesis Data Firehose 将该记录视为处理不成功。对于此类故障,您可以向亚马逊发送错误日志 CloudWatch 从您的 Lambda 函数的日志。有关更多信息,请参阅 。访问 Amazon CloudWatch 的日志Amazon Lambda在里面Amazon Lambda开发人员指南.

如果数据转换失败,则未被成功处理的记录会传输到您在 processing-failed 文件夹中的 S3 存储桶。这些记录具有如下格式:

{ "attemptsMade": "count", "arrivalTimestamp": "timestamp", "errorCode": "code", "errorMessage": "message", "attemptEndingTimestamp": "timestamp", "rawData": "data", "lambdaArn": "arn" }
attemptsMade

尝试的调用请求数。

arrivalTimestamp

Kinesis Data Firehose 收到记录的时间。

errorCode

Lambda 返回的 HTTP 错误代码。

errorMessage

从 Lambda 返回的错误消息。

attemptEndingTimestamp

Kinesis Data Firehose 停止尝试 Lambda 调用的时间长度。

rawData

经过 base64 编码的记录数据。

lambdaArn

Lambda 函数的 Amazon 资源名称(ARN)。

Lambda 调用的持续时间

Kinesis Data Firehose 支持长达 5 分钟的 Lambda 调用时间。如果您的 Lambda 函数需要超过 5 分钟才能完成,则会出现以下错误:Firehose 在调用时遇到了超时错误AmazonLambda。支持的最长函数超时长为 5 分钟。

有关发生此类错误时 Kinesis Data Firehose 会做什么的信息,请参见数据转换失败处理.

源记录备份

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