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

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

排除针对 SQL 应用程序的 Amazon Kinesis Data Analytics 故障

以下内容可帮助排除在 Amazon Kinesis Data Analytics Analytics 应用程序中可能遇到的问题。

无法运行 SQL 代码

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

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

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

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

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

引用数据已过时

引用数据是在应用程序启动或更新时或在服务问题导致的应用程序中断期间从 Amazon 简单存储服务 (Amazon S3) 对象加载到应用程序中的。

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

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

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

  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 警报设置为在您落后一个小时以上时触发。但是,时间量取决于您的使用案例。您可以按需进行调整。

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

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

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

  • 在您的 SQL 代码中重新定义了流— 在创建流以及与流关联的数据泵后,您无法在代码中重新定义相同的数据流。有关创建流的更多信息,请参阅创建流中的Amazon Kinesis Data Analytics SQL 参考。有关创建数据泵的更多信息,请参阅 CREATE PUMP

  • GROUP BY 子句使用多个行时间列— 您只能在 GROUP BY 子句中指定一个 ROWTIME 列。有关更多信息,请参阅 。分组依据ROWTIME中的Amazon Kinesis Data Analytics SQL 参考

  • 一种或多种数据类型具有无效的转换— 在这种情况下,您的代码具有无效的隐式转换。例如,您可能在代码中将 timestamp 转换成 bigint

  • 流的名称与服务预留流名称相同 - 流的名称不能与服务预留流 error_stream 的名称相同。

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

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

吞吐量不足或 MillisBehindLatest 较高

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

  • 检查应用程序的InputBytesCloudWatch 指标。如果提取速度超过 4 MB/秒,这可能会导致 MillisBehindLatest 增加。要提高应用程序的吞吐量,请增加 InputParallelism 参数值。有关更多信息,请参阅并行处理输入流以增加吞吐量

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

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

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

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

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

    • 检查 Amazon Lambda 函数以确定是否具有可提高性能的其他方面。检查应用程序 Lambda 函数的 CloudWatch Logs。有关更多信息,请参阅 。访问 Amazon CloudWatch 指标中的Amazon Lambda开发人员指南

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