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

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

对 AAmazon Kinesis Data Firehose

如果 Kinesis Data Firehose 在传送或处理数据时遇到错误,它将重试直到配置的重试持续时间到期。如果重试持续时间在数据成功传输之前结束,Kinesis Data Firehose 会将数据备份到配置的 S3 备份存储桶。如果目的地是 Amazon S3 且传输失败,或者如果传输到备份 S3 存储桶失败,Kinesis Data Firehose 会继续重试,直到保留期结束。对于DirectPut传输流,Kinesis Data Firehose 会将记录保留 24 小时。对于其数据源为 Kinesis 数据流的传输流,您可以按照更改数据保留期中的说明更改保留期。

如果数据源是 Kinesis 数据流,则 Kinesis Data Firehose 会无限期地重试以下操作:DescribeStreamGetRecords、和GetShardIterator

如果传输流使用 DirectPut,请检查 IncomingBytesIncomingRecords 指标,查看是否有传入流量。如果您正在使用 PutRecordPutRecordBatch,请务必捕获异常并重试。我们建议使用带指数退避的重试策略,并且提供抖动和多次重试功能。此外,如果您使用PutRecordBatch API,请确保即使 API 调用成功,您的代码也会检查响应FailedPutCount中的值。

如果传输流使用 Kinesis 数据流作为源,请检查源数据流的 IncomingBytesIncomingRecords 指标。此外,请确保为传输流发出 DataReadFromKinesisStream.BytesDataReadFromKinesisStream.Records 指标。

有关使用追踪配送错误的信息 CloudWatch,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose

未将数据传输到 Amazon S3

如果数据未传送到您的Amazon Simple Storage Service (Amazon S3) 存储桶,请检查以下内容。

  • 检查 Kinesis Data FirehoseIncomingBytesIncomingRecords指标,确保数据成功发送到你的 Kinesis Data Firehose 传输流。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose

  • 如果启用了 Lambda 的数据转换,请检查 Kinesis Data FirehoseExecuteProcessingSuccess 指标,确保 Kinesis Data Firehose 已尝试调用你的 Lambda 函数。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose

  • 查看 Kinesis Data FirehoseDeliveryToS3.Success 指标,确保 Kinesis Data Firehose 已尝试将数据存入您的Amazon S3 存储桶。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose

  • 如果尚未启用错误日志记录功能,则启用它并检查是否存在传输失败错误日志。有关更多信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose

  • 确保在 Kinesis Data Firehose 控制流中指定的 Amazon S3 存储桶仍然存在。

  • 如果启用了 Lambda 的数据转换,请确保您的交付流中指定的 Lambda 函数仍然存在。

  • 确保在 Kinesis Data Firehose 传输流中指定的 IAM 角色有权访问您的 S3 存储桶和您的 Lambda 函数(如果启用了数据转换)。有关更多信息,请参阅向 Kinesis Data Firehose 访问权限

  • 如果您使用数据转换,请确保您的 Lambda 函数永远不会返回负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换

数据未发送到Amazon Redshift ft

如果数据未传输到您的 Amazon Redshift 集群,请检查以下内容。

在加载到Amazon Redshift ft 之前,数据会先传输到您的 S3 存储桶。如果数据未传输至 S3 存储桶,请参阅未将数据传输到 Amazon S3

  • 查看 Kinesis Data FirehoseDeliveryToRedshift.Success 指标,确保 Kinesis Data Firehose 已尝试将数据从 S3 存储桶复制到Amazon Redshift ft 集群。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose

  • 如果尚未启用错误日志记录功能,则启用它并检查是否存在传输失败错误日志。有关更多信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose

  • 查看Amazon Redshift ftSTL_CONNECTION_LOG 表,看看 Kinesis Data Firehose 能否成功建立连接。在该表中,应该能够根据用户名查看连接及其状态。有关更多信息,请参阅 STL_CONNECTION_LOGAmazon Redshift ft 数据库开发人员指南

  • 如果之前的检查显示正在建立连接,请检查 Amazon RedshiftSTL_LOAD_ERRORS 表以验证 COPY 失败的原因。有关更多信息,请参阅 STL_LOAD_ERRORSAmazon Redshift ft 数据库开发人员指南

  • 确保 Kinesis Data Firehose 交付流中的Amazon Redshift ft 配置准确有效。

  • 确保在 Kinesis Data Firehose 传输流中指定的 IAM 角色可以访问 Amazon Redshift 从中复制数据的 S3 存储桶,以及用于数据转换的 Lambda 函数(如果启用了数据转换)。有关更多信息,请参阅向 Kinesis Data Firehose 访问权限

  • 如果您的 Amazon Redshift 集群位于虚拟私有云 (VPC) 中,请确保该集群允许通过 Kinesis Data Firehose IP 地址进行访问。有关更多信息,请参阅授予 Kinesis Data Firehose 访问Amazon Redshift ft 目的地的

  • 确保 Amazon Redshift 集群公开使用。

  • 如果您使用数据转换,请确保您的 Lambda 函数永远不会返回负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换

数据未传送到亚马逊 OpenSearch 服务

如果数据未传送到您的 OpenSearch 服务域,请检查以下内容。

可以同时将数据备份到您的 Amazon S3 存储桶。如果数据未传输至您的 S3 存储桶,请参阅未将数据传输到 Amazon S3

数据未传输到 Splunk

如果数据未传输到您的 Splunk 终端节点,请检查以下各项。

  • 如果你的 Splunk 平台位于 VPC 中,请确保 Kinesis Data Firehose 可以访问它。有关更多信息,请参阅在 VPC 中访问 Splunk

  • 如果您使用Amazon负载均衡器,请确保它是Classic Load Balancer。Kinesis Data Firehose 不支持应用程序Load Balancer。此外,启用基于持续时间的粘性会话,并禁用 Cookie 过期。有关如何执行此操作的信息,请参阅基于持续时间的会话粘性

  • 检查 Splunk 平台要求。适用于 Kinesis Data Firehose 的 Splunk 插件需要 Splunk 平台版本 6.6.X 或更高版本。有关更多信息,请参阅适用于 Amazon Kinesis Firehose 的 Splunk 插件

  • 如果您在 Kinesis Data Firehose 和 HTTP 事件收集器 (HEC) 节点之间有代理(Elastic Load Balancing 或其他),请启用粘性会话以支持 HEC 确认 (ACK)。

  • 确保您使用有效的 HEC 令牌。

  • 确保启用了 HEC 令牌。请参阅 Enable and disable Event Collector tokens

  • 检查是否为发送到 Splunk 的数据正确设置格式。有关更多信息,请参阅为 HTTP 事件收集器的事件设置格式

  • 确保为 HEC 令牌和输入事件配置了有效索引。

  • 如果由于 HEC 节点出现服务器错误而无法上传到 Splunk,将会自动重试该请求。如果所有重试都失败,则数据将备份到 Amazon S3。检查您的数据是否出现在 Amazon S3 中,这表明存在此类故障。

  • 确保在您的 HEC 令牌上启用了索引器确认。有关更多信息,请参阅启用索引器确认

  • 增加 Kinesis Data Firehose 传输流 Splunk 目标配置HECAcknowledgmentTimeoutInSeconds中的值。

  • DurationInSecondsRetryOptions在你的 Kinesis Data Firehose 传输流的 Splunk 目标配置中增加以下的值。

  • 检查 HEC 的运行状况。

  • 如果您使用数据转换,请确保您的 Lambda 函数永远不会返回负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换

  • 确保名为 ackIdleCleanup 的 Splunk 参数设置为 true。默认情况下,它设置为 false。若要将此参数设置为 true,请执行以下操作:

    • 对于托管 Splunk 云部署,请使用 Splunk 支持门户提交案例。在此情况下,应请求 Splunk 支持人员启用 HTTP 事件收集器,在 inputs.conf 中将 ackIdleCleanup 设置为 true,并创建或修改要用于此插件的负载均衡器。

    • 对于分布式 Splunk Enterprise 部署,请将 inputs.conf 文件中的 ackIdleCleanup 参数设置为 true。对于 *nix 用户,此文件位于 $SPLUNK_HOME/etc/apps/splunk_httpinput/local/ 下。对于 Windows 用户,它位于 %SPLUNK_HOME%\etc\apps\splunk_httpinput\local\ 下。

    • 对于单实例 Splunk Enterprise 部署,请将 inputs.conf 文件中的 ackIdleCleanup 参数设置为 true。对于 *nix 用户,此文件位于 $SPLUNK_HOME/etc/apps/splunk_httpinput/local/ 下。对于 Windows 用户,它位于 %SPLUNK_HOME%\etc\apps\splunk_httpinput\local\ 下。

  • 请参阅 Amazon Kinesis Firehose 的 Splunk 插件故障排除

传输流不可用作 CloudWatch 日志、 CloudWatch 事件或Amazon IoT操作的目标

某些Amazon服务只能向位于同一Amazon区域的 Kinesis Data Firehose 传输流发送消息和事件。验证您的 Kinesis Data Firehose 交付流是否与其他服务位于同一区域。

数据新鲜度指标增长或未发出数据新鲜度指标

数据新鲜度用于衡量您的数据在传输流中的最新程度。这是传输流中最古老的数据记录的年龄,测量时间是从 Kinesis Data Firehose 提取数据到现在。Kinesis Data Firehose 提供了可用于监控数据新鲜度的指标。要确定指定目标的数据新鲜度指标,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose

如果您为所有事件或所有文档启用备份,请监控两个单独的数据新鲜度指标:一个用于主目标,另一个用于备份。

如果未发出数据新鲜度指标,则意味着传输流没有有效的传输。当完全阻止数据传输或没有任何传入数据时,会发生这种情况。

如果数据新鲜度指标在不断增加,则意味着数据传输落后。这可能是由于以下原因之一。

  • 目标无法跟上传输速率。如果 Kinesis Data Firehose 因高流量而遇到暂时性错误,则交付可能会落后。这可能发生在Amazon S3 以外的目的地( OpenSearch 服务、Amazon Redshift ft 或 Splunk 也可能发生)。确保您的目标有足够的容量来处理传入流量。

  • 目标非常慢。如果 Kinesis Data Firehose 遇到高延迟,数据传输可能会落后。监控目标的延迟指标。

  • Lambda 函数很慢。这可能导致数据传输速率要低于传输流的数据接收速率。如果可能,提高 Lambda 函数的效率。例如,如果函数处理网络 IO,请使用多个线程或异步 IO 来增加并行度。另外,可以考虑增加 Lambda 函数的内存大小,这样 CPU 分配就可以相应增加。这可能会加快 Lambda 调用。有关配置 Lambda 函数的信息,请参阅配置Amazon Lambda 函数

  • 在数据传输过程中出现故障。有关如何使用 Amazon Logs 监控错误 CloudWatch 的信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose

  • 如果传输流的数据源是 Kinesis 数据流,则可能会存在限制情况。检查 ThrottledGetRecordsThrottledGetShardIteratorThrottledDescribeStream 指标。如果有多个使用者附加到 Kinesis 数据流,请考虑以下事项:

    • 如果 ThrottledGetRecordsThrottledGetShardIterator 指标非常高,我们建议您增加为数据流预配置的分片数。

    • 如果ThrottledDescribeStream为高,我们建议您为中配置的角色添加kinesis:listshards权限KinesisStreamSourceConfiguration

  • 目标缓冲提示较低。这可能会增加 Kinesis Data Firehose 需要往返目的地的次数,这可能会导致交付滞后。考虑增大缓冲提示的值。有关更多信息,请参阅BufferingHints

  • 当错误频繁发生时,较长的重试持续时间可能会导致传输落后。考虑减小重试持续时间。此外,监控错误并尝试减少这些错误。有关如何使用 Amazon Logs 监控错误 CloudWatch 的信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose

  • 如果目标为 Splunk 并且 DeliveryToSplunk.DataFreshness 非常高,但 DeliveryToSplunk.Success 看起来不错,则 Splunk 集群可能很忙。如果可能,请释放 Splunk 集群。或者,联系Amazon Support 部门,请求增加 Kinesis Data Firehose 用于与 Splunk 集群通信的频道数量。

记录格式转换为 Apache Parquet 失败

如果您获取包含该Set类型的 DynamoDB 数据,通过 Lambda 将其流式传输到传输流,然后使用将记录格式转换为 Apache Parquet,就会发生这种情况。Amazon Glue Data Catalog

当Amazon Glue搜寻器为 DynamoDB 集合数据类型(StringSetNumberSet、和BinarySet)建立索引时,它会将它们分别以SET<STRING>SET<BIGINT>SET<BINARY>、和和的形式存储在数据目录中。但是,要让 Kinesis Data Firehose 将数据记录转换为 Apache Parquet 格式,它需要 Apache Hive 数据类型。由于集类型并非有效的 Apache Hive 数据类型,所以转换会失败。要进行成功转换,请使用 Apache Hive 数据类型更新数据目录。为此,您可以将数据目录中的 set 更改为 array

要将 Amazon Glue 数据目录中的一个或多个数据类型从 set 更改为 array,请执行以下操作:
  1. 登录 Amazon Web Services Management Console,然后打开 Amazon Glue 控制台,网址为:https://console.aws.amazon.com/glue/

  2. 在左侧窗格中的数据目录标题下,选择

  3. 在表列表中,选择您需要修改一个或多个数据类型的表的名称。这会将您引导至该表的详细信息页面。

  4. 选择详细信息页面右上角的编辑架构按钮。

  5. 数据类型列中,选择第一个 set 数据类型。

  6. 列类型下拉列表中,将该类型从 set 更改为 array

  7. ArraySchema字段中,输入array<string>array<int>array<binary>、或,具体取决于您的场景的相应数据类型。

  8. 选择 Update(更新)。

  9. 重复之前的步骤,将其他 set 类型转换为 array 类型。

  10. 选择保存

尽管指标良好,但目标没有数据

如果没有数据接收问题,并且为传输流发出的指标看起来不错,但您在目标中看不到数据,请检查读取器逻辑。确保您的读取器正确解析所有数据。