本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
常见问题
以下是一些问题排查技巧,可帮助您解决使用 Firehose 流时遇到的常见问题。
Firehose 流不可用
Firehose 流不能作为 Log CloudWatch s、 CloudWatch Events 或 Io Amazon T 操作的目标提供,因为某些 Amazon 服务只能向位于相同的 Firehose 流发送消息和事件。 Amazon Web Services 区域验证您的 Firehose 流是否与其他服务位于同一区域。
目的地没有数据
如果没有数据摄取问题,并且为 Firehose 流发出的指标看起来不错,但您在目的地中看不到数据,请检查读取器逻辑。确保您的读取器正确解析所有数据。
数据新鲜度指标增长或未发出数据新鲜度指标
数据新鲜度用于衡量您的数据在 Firehose 流中的最新程度。这是指 Firehose 流中最早数据记录的期限,从 Firehose 摄取数据到现在的时间计算。Firehose 提供了可用于监控数据新鲜度的指标。要确定指定目标的数据新鲜度指标,请参阅使用指标监控 Amazon Data Firehose CloudWatch 。
如果您为所有事件或所有文档启用备份,请监控两个单独的数据新鲜度指标:一个用于主目标,另一个用于备份。
如果未发出数据新鲜度指标,则意味着 Firehose 流没有有效的传输。当完全阻止数据传输或没有任何传入数据时,会发生这种情况。
如果数据新鲜度指标在不断增加,则意味着数据传输落后。这可能是由于以下原因之一。
-
目标无法跟上传输速率。如果由于高流量而导致 Firehose 临时遇到错误,则传输可能会落后。Amazon S3 以外的目标可能会发生这种情况(S OpenSearch ervice、Amazon Redshift 或 Splunk 可能会发生这种情况)。确保您的目标有足够的容量来处理传入流量。
-
目标非常慢。如果 Firehose 遇到高延迟,则数据传输可能会落后。监控目标的延迟指标。
-
Lambda 函数运行缓慢。这可能导致数据传输速率要低于 Firehose 流的数据摄取速率。如果可能,请提高 Lambda 函数的效率。例如,如果函数处理网络 IO,请使用多个线程或异步 IO 来增加并行度。此外,考虑增加 Lambda 函数的内存大小,以便相应地增加 CPU 分配。这可能会加快 Lambda 的调用速度。有关配置 Lambda 函数的信息,请参阅配置 L ambda Amazon 函数。
-
在数据传输过程中出现故障。有关如何使用 Amazon Logs 监控错误 CloudWatch 的信息,请参阅使用日志监控 Amazon Data Firehose CloudWatch 。
-
如果 Firehose 流的数据来源是 Kinesis 数据流,则可能会存在限制情况。检查
ThrottledGetRecords
、ThrottledGetShardIterator
和ThrottledDescribeStream
指标。如果有多个使用者附加到 Kinesis 数据流,请考虑以下事项:-
如果
ThrottledGetRecords
和ThrottledGetShardIterator
指标非常高,我们建议您增加为数据流预配置的分片数。 -
如果
ThrottledDescribeStream
为高,我们建议您为中配置的角色添加kinesis:listshards
权限KinesisStreamSourceConfiguration。
-
-
目标缓冲提示较低。这可能会增加 Firehose 传输到目的地所需的往返次数,从而可能导致传输滞后。考虑增大缓冲提示的值。有关更多信息,请参阅 BufferingHints。
-
当错误频繁发生时,较长的重试持续时间可能会导致传输落后。考虑减小重试持续时间。此外,监控错误并尝试减少这些错误。有关如何使用 Amazon Logs 监控错误 CloudWatch 的信息,请参阅使用日志监控 Amazon Data Firehose CloudWatch 。
-
如果目标为 Splunk 并且
DeliveryToSplunk.DataFreshness
非常高,但DeliveryToSplunk.Success
看起来不错,则 Splunk 集群可能很忙。如果可能,请释放 Splunk 集群。或者,请联系 Amazon Support,请求增加 Firehose 用来与 Splunk 集群通信的通道数量。
记录格式转换为 Apache Parquet 失败
如果您获取包含Set
类型的 DynamoDB 数据,通过 Lambda 将其流式传输到 Fire Amazon Glue Data Catalog hose 流,然后使用将记录格式转换为 Apache Parquet,就会发生这种情况。
当 Amazon Glue Crawler 为 DynamoDB 集数据类型StringSet
(NumberSet
、BinarySet
和)编制索引时,它会将它们分别存储在数据目录中SET<STRING>
,即SET<BIGINT>
、和。SET<BINARY>
但对于 Firehose,要将数据记录转换为 Apache Parquet 格式,需要 Apache Hive 数据类型。由于集类型并非有效的 Apache Hive 数据类型,所以转换会失败。要进行成功转换,请使用 Apache Hive 数据类型更新数据目录。为此,您可以将数据目录中的 set
更改为 array
。
在数据目录array
中set
将一种或多种数据类型从更改为 Amazon Glue
登录 Amazon Web Services Management Console 并打开 Amazon Glue 控制台,网址为https://console.aws.amazon.com/glue/
。 -
在左侧窗格中的数据目录标题下,选择表。
-
在表列表中,选择您需要修改一个或多个数据类型的表的名称。这会将您引导至该表的详细信息页面。
-
选择详细信息页面右上角的编辑架构按钮。
-
在数据类型列中,选择第一个
set
数据类型。 -
在列类型下拉列表中,将该类型从
set
更改为array
。 -
根据您的ArraySchema场景的相应数据类型
array<binary>
,在该字段中输array<string>
入、或。array<int>
-
选择更新。
-
重复之前的步骤,将其他
set
类型转换为array
类型。 -
选择保存。
Lambda 的已转换对象缺少字段
当您使用 Lambda 数据转换将 JSON 数据更改为 Parquet 对象时,某些字段可能会在转换后缺失。如果您的 JSON 对象有大写字母并且区分大小写设置为 false
,则会发生这种情况,这可能会导致数据转换后的 JSON 密钥不匹配,从而导致 S3 存储桶中生成的 Parquet 对象中缺少数据。
要解决此问题,请确保将 hose 配置将 deserializationOption:
case.insensitive
设置为 true
,以便 JSON 密钥在转换后匹配。