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

对于新项目,建议您使用新的适用于 Apache Flink Studio 的托管服务,而不是使用适用于 SQL 应用程序的 Kinesis Data Analytics。Managed Service for Apache Flink Studio 不仅操作简单,还具有高级分析功能,使您能够在几分钟内构建复杂的流处理应用程序。

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

适用于 SQL 应用程序的 Amazon Kinesis Data Analytics 故障排除

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

已关停的应用程序

  • 什么是已关停的适用于 SQL 的 Kinesis Data Analytics 应用程序?

    已关停的应用程序是至少三个月未处理任何记录的应用程序。即使客户没有使用适用于 SQL 的 Kinesis Data Analytics 资源,但仍在为其支付费用。

  • Amazon 什么时候开始关停空闲的应用程序?

    Amazon 将在 2023 年 11 月 14 日至 2023 年 11 月 21 日期间关停空闲的应用程序。我们将在所在区域的工作时间段关停空闲的应用程序。

  • 是否可以重新启动已关停的适用于 SQL 的 Kinesis Data Analytics 应用程序?

    是。您可以在需要时照常重新启动应用程序。无需创建支持票证。

  • Amazon 停用空闲应用程序后,我的查询结果是否会随之删除?

    不会。首先,由于您的应用程序处于空闲状态,因此无法对查询进行处理。其次,您的查询结果不会存储在适用于 SQL 的 Kinesis Data Analytics 中。您可以为适用于 SQL 的 Kinesis Data Analytics 应用程序配置接收器 (目的地),例如,在 Amazon S3 或其他数据流中。因此,您保留对数据的完整所有权,并且根据该存储服务的条款,这些数据仍可被检索。

  • 我不希望应用程序被停用,我该怎么做?

    在 2023 年 11 月 10 日之前任何时候,你可以发送电子邮件给服务团队 (kda-sql-questions@amazon.com),要求不停用您的应用程序。电子邮件中应包含您的账户 ID 和应用程序 ARN。

无法运行 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 控制台上,在列表中选择应用程序名称,然后选择应用程序详细信息

  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 代码,常见原因如下:

  • 在 SQL 代码中重新定义了流 – 在创建流和与流关联的数据泵后,不能在代码中重新定义相同的流。有关创建流的更多信息,请参阅 Amazon Kinesis Data Analytics SQL 参考中的 CREATE STREAM。有关创建数据泵的更多信息,请参阅 CREATE PUMP

  • GROUP BY 子句使用多个 ROWTIME 列 - 您只能在 GROUP BY 子句中指定一个 ROWTIME 列。有关更多信息,请参阅 Amazon Kinesis Data Analytics SQL 参考 中的 GROUP BYROWTIME

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

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

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

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

吞吐量不足或 MillisBehindLatest 较高

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

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

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

  • 如果您的应用程序使用 Amazon Lambda 函数进行预处理或作为输出,请检查应用程序的 InputProcessing.DurationLambdaDelivery.Duration 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 日志。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的访问适用于 的 Amazon CloudWatch 指标。

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

  • 增加 KPU 限制后,如果您的应用程序仍然存在问题,请检查应用程序的输入吞吐量,确认其是否超过 100 MB/秒。如果超过 100 MB/秒,建议进行更改,降低整体吞吐量,从而稳定应用程序,例如通过减少发送至数据源 (Kinesis Data Analytics SQL 应用程序的读取来源) 的数据量。此外,还可以使用其他方法,包括增加应用程序的并行性、缩短计算时间、将列式数据类型从 VARCHAR 更改为更小的数据类型 (例如 INTEGER、LONG 等),以及减少通过采样或过滤处理的数据。

    注意

    建议您定期检查应用程序的 InputProcessing.OkBytes 指标,以便您可以规划使用多个 SQL 应用程序,或者如果应用程序的预计输入吞吐量将超过 100 MB/秒,则可以迁移到 managed-flink/latest/java/。