Amazon Kinesis Data Analytics for SQL 应用程序故障排除 - Amazon Kinesis Data Analytics for SQL 应用程序开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Amazon Kinesis Data Analytics for SQL 应用程序故障排除

以下内容可以帮助您解决在 Amazon Kinesis Data Analytics for SQL 应用程序中可能遇到的问题。

无法运行 SQL 代码

如果需要了解如何使特定 SQL 语句正常工作,可以在使用 Kinesis Data Analytics 时利用几个不同的资源:

无法检测到或发现我的架构

在某些情况下,Kinesis Data Analytics 无法检测或发现架构。在很多此类情况下,您仍然可以使用 Kinesis Data Analytics。

假设您具有不使用分隔符的 UTF-8 编码数据,或具有使用非逗号分隔值 (CSV) 格式的数据,或发现 API 未发现您的架构。在这些情况下,可以手动定义架构或使用字符串操作函数来构建数据。

为了发现您的数据流的架构,Kinesis Data Analytics 随机对流中的最新数据进行采样。如果您无法始终如一地向您的流发送数据,Kinesis Data Analytics 可能无法检索样本和检测架构。有关更多信息,请参阅 针对流数据使用架构发现功能。)

引用数据已过时

在启动或更新应用程序时或在服务问题导致的应用程序中断期间,引用数据将从 Amazon Simple Storage Service (Amazon S3) 对象加载到应用程序中。

在更新基础 Amazon S3 对象时,不会将引用数据加载到应用程序中。

如果应用程序中的引用数据不是最新的,可以通过以下步骤重新加载这些数据:

  1. 在 Kinesis Data Analytics 控制台上,在列表中选择应用程序名称,然后选择 Application details (应用程序详细信息)

  2. 选择 Go to SQL editor (转到 SQL 编辑器) 打开应用程序的 Real-time analytics (实时分析) 页面。

  3. Source Data (源数据) 视图中,选择引用数据表名称。

  4. 依次选择 Actions (操作)Synchronize reference data table (同步引用数据表)

应用程序不写入到目标

如果数据未被写入到目标,请检查以下各项:

如果该角色和目标配置看起来正确,请尝试重启应用程序,同时为 LAST_STOPPED_POINT 指定 InputStartingPositionConfiguration

要监控的重要应用程序运行状况参数

要确保您的应用程序正常运行,我们建议您监控某些重要参数。

监控的最重要参数是 Amazon CloudWatch 度量 MillisBehindLatest。该度量标准表示您从流中读取的当前时间的距离。此指标可帮助确定您是否足够快速地处理源流中的记录。

一般来说,应将 CloudWatch 警报设置为在滞后超过 1 小时时触发。但是,时间量取决于您的使用案例。您可以按需进行调整。

有关更多信息,请参阅 最佳实践。)

在运行应用程序时出现无效代码错误

如果无法保存和运行 Amazon Kinesis Data Analytics 应用程序的 SQL 代码,常见原因如下:

应用程序正在将错误写入到错误流

如果您的应用程序正在将错误写入到应用程序内部错误流,则可以使用标准库解码 DATA_ROW 字段中的值。有关错误流的更多信息,请参阅错误处理

吞吐量不足或 MillisBehindLatest 较高

如果应用程序的 MillisBehindLatest 指标稳步增加或始终高于 1000 (1 秒),这可能是以下原因造成的:

  • 检查应用程序的 InputBytes CloudWatch 指标。如果您的摄入量超过4MB/sec,这可能导致增加 MillisBehindLatest。要改善应用的吞吐量,请增加 InputParallelism 参数。有关更多信息,请参阅 并行处理输入流以增加吞吐量。)

  • 检查应用程序的输出传输 Success 指标以确定传输到目标是否失败。确认您已正确配置输出,并且您的输出流具有足够的容量。

  • 如果您的应用程序使用 AWS Lambda 函数进行预处理或作为输出,请检查应用程序的 InputProcessing.DurationLambdaDelivery.Duration CloudWatch 指标。如果 Lambda 函数调用持续时间超过 5 秒,请考虑执行以下操作:

    • 增加 Lambda 函数的内存分配。您可以在 AWS Lambda 控制台的 Configuration (配置) 页面上的 Basic settings (基本设置) 中执行此操作。有关更多信息,请参阅 https://docs.amazonaws.cn/lambda/latest/dg/resource-model.html 开发人员指南 中的AWS Lambda配置 Lambda 函数

    • 在应用程序的输入流中提高分片数。这会提高应用程序将调用的并行函数的数量,从而可能提高吞吐量。

    • 确认函数没有进行影响性能的阻止性调用,如同步的外部资源请求。

    • 检查 AWS Lambda 函数以确定是否具有可提高性能的其他方面。检查应用程序 Lambda 函数的 CloudWatch Logs。有关更多信息,请参阅 https://docs.amazonaws.cn/lambda/latest/dg/monitoring-functions-access-metrics.html 开发人员指南 中的AWS Lambda访问 AWS Lambda 的 Amazon CloudWatch 指标

  • 确认您的应用程序未达到 Kinesis 处理单元 (KPU) 的默认限制。如果您的应用程序达到该限制,您可以请求提高限制。有关更多信息,请参阅 自动扩展应用程序以提高吞吐量。)