本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 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 会无限期地重试以下操作:DescribeStream
GetRecords
、和GetShardIterator
。
如果传输流使用 DirectPut
,请检查 IncomingBytes
和 IncomingRecords
指标,查看是否有传入流量。如果您正在使用 PutRecord
或 PutRecordBatch
,请务必捕获异常并重试。我们建议使用带指数退避的重试策略,并且提供抖动和多次重试功能。此外,如果您使用PutRecordBatch
API,请确保即使 API 调用成功,您的代码也会检查响应FailedPutCount中的值。
如果传输流使用 Kinesis 数据流作为源,请检查源数据流的 IncomingBytes
和 IncomingRecords
指标。此外,请确保为传输流发出 DataReadFromKinesisStream.Bytes
和 DataReadFromKinesisStream.Records
指标。
有关使用追踪配送错误的信息 CloudWatch,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose。
问题
未将数据传输到 Amazon S3
如果数据未传送到您的Amazon Simple Storage Service (Amazon S3) 存储桶,请检查以下内容。
-
检查 Kinesis Data Firehose
IncomingBytes
和IncomingRecords
指标,确保数据成功发送到你的 Kinesis Data Firehose 传输流。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
如果启用了 Lambda 的数据转换,请检查 Kinesis Data Firehose
ExecuteProcessingSuccess
指标,确保 Kinesis Data Firehose 已尝试调用你的 Lambda 函数。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
查看 Kinesis Data Firehose
DeliveryToS3.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 Firehose
DeliveryToRedshift.Success
指标,确保 Kinesis Data Firehose 已尝试将数据从 S3 存储桶复制到Amazon Redshift ft 集群。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
如果尚未启用错误日志记录功能,则启用它并检查是否存在传输失败错误日志。有关更多信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose:
-
查看Amazon Redshift ft
STL_CONNECTION_LOG
表,看看 Kinesis Data Firehose 能否成功建立连接。在该表中,应该能够根据用户名查看连接及其状态。有关更多信息,请参阅STL_CONNECTION_LOG
Amazon Redshift ft 数据库开发人员指南。 -
如果之前的检查显示正在建立连接,请检查 Amazon Redshift
STL_LOAD_ERRORS
表以验证 COPY 失败的原因。有关更多信息,请参阅STL_LOAD_ERRORS
Amazon 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。
-
检查 Kinesis Data Firehose
IncomingBytes
和IncomingRecords
指标,确保数据成功发送到你的 Kinesis Data Firehose 传输流。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
如果启用了 Lambda 的数据转换,请检查 Kinesis Data Firehose
ExecuteProcessingSuccess
指标,确保 Kinesis Data Firehose 已尝试调用你的 Lambda 函数。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
检查 Kinesis Data Fire
DeliveryToAmazonOpenSearchService.Success
hose 指标,确保 Kinesis Data Firehose 已尝试将数据索引到 OpenSearch 服务集群。有关更多信息,请参阅使用 CloudWatch 指标监控 Kinesis Data Firehose: -
如果尚未启用错误日志记录功能,则启用它并检查是否存在传输失败错误日志。有关更多信息,请参阅使用 CloudWatch 日志监控 Kinesis Data Firehose:
-
确保您的交付流中的 OpenSearch 服务配置准确有效。
-
如果启用了 Lambda 的数据转换,请确保您的交付流中指定的 Lambda 函数仍然存在。
-
确保在交付流中指定的 IAM 角色可以访问您的 OpenSearch 服务集群和 Lambda 函数(如果启用了数据转换)。有关更多信息,请参阅授予 Kinesis Data Firehose 访问公共 OpenSearch 服务目的地的权限:
-
如果您使用数据转换,请确保您的 Lambda 函数永远不会返回负载大小超过 6 MB 的响应。有关更多信息,请参阅 Amazon Kinesis Data Firehose 数据转换。
数据未传输到 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
中的值。 -
DurationInSeconds
RetryOptions
在你的 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\
下。
-
传输流不可用作 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 数据流,则可能会存在限制情况。检查
ThrottledGetRecords
、ThrottledGetShardIterator
和ThrottledDescribeStream
指标。如果有多个使用者附加到 Kinesis 数据流,请考虑以下事项:-
如果
ThrottledGetRecords
和ThrottledGetShardIterator
指标非常高,我们建议您增加为数据流预配置的分片数。 -
如果
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 集合数据类型(StringSet
NumberSet
、和BinarySet
)建立索引时,它会将它们分别以SET<STRING>
SET<BIGINT>
SET<BINARY>
、和和的形式存储在数据目录中。但是,要让 Kinesis Data Firehose 将数据记录转换为 Apache Parquet 格式,它需要 Apache Hive 数据类型。由于集类型并非有效的 Apache Hive 数据类型,所以转换会失败。要进行成功转换,请使用 Apache Hive 数据类型更新数据目录。为此,您可以将数据目录中的 set
更改为 array
。
要将 Amazon Glue 数据目录中的一个或多个数据类型从 set
更改为 array
,请执行以下操作:
登录 Amazon Web Services Management Console,然后打开 Amazon Glue 控制台,网址为:https://console.aws.amazon.com/glue/
。 -
在左侧窗格中的数据目录标题下,选择表。
-
在表列表中,选择您需要修改一个或多个数据类型的表的名称。这会将您引导至该表的详细信息页面。
-
选择详细信息页面右上角的编辑架构按钮。
-
在数据类型列中,选择第一个
set
数据类型。 -
在列类型下拉列表中,将该类型从
set
更改为array
。 -
在ArraySchema字段中,输入
array<string>
array<int>
array<binary>
、或,具体取决于您的场景的相应数据类型。 -
选择 Update(更新)。
-
重复之前的步骤,将其他
set
类型转换为array
类型。 -
选择保存。
尽管指标良好,但目标没有数据
如果没有数据接收问题,并且为传输流发出的指标看起来不错,但您在目标中看不到数据,请检查读取器逻辑。确保您的读取器正确解析所有数据。