Amazon Kinesis Data Analytics S - Amazon Kinesis Data Analytics 开发者指南
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

对于新项目,我们建议您使用新的 Kinesis Data Analytics 工作室,而不是 SQL 应用程序的 Kinesis Data Analytics。Kinesis Data Analytics Studio 将易用性与高级分析功能相结合,使您能够在几分钟内构建复杂的流处理应用程序。

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

Amazon Kinesis Data Analytics S

以下内容可帮助您排查在 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 控制台上,在列表中选择应用程序名称,然后选择应用程序详细信息

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

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

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

应用程序不写入到目标

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

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

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

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

要监控的最重要的参数是亚马逊 CloudWatch 指标MillisBehindLatest。此指标表示落后于您从流中读取的当前时间多久。此指标可帮助确定您是否足够快速地处理源流中的记录。

通常,您应该设置 CloudWatch 警报,以便在落后超过一小时时触发。但是,时间量取决于您的使用案例。您可以按需进行调整。

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

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

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

  • 在 SQL 代码中重新定义了该流 — 在创建了流和与该流关联的泵之后,您无法在代码中重新定义相同的流。有关创建直播的更多信息,请参阅《Amazon Kinesis Data Stream s SQL 参考》中的 CREATE STREAM。有关创建数据泵的更多信息,请参阅 CREATE PUMP

  • GROUP BY 子句使用多个 ROWTIME 列 — 在 GROUP BY 子句中只能指定一个 ROWTIME 列。有关更多信息,请参阅 Amazon Kinesis Data Analytics SQL 参考中的 G ROUP BY 和 ROW TIM E。

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

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

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

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

吞吐量不足或过高 MillisBehindLatest

如果您的应用程序的MillisBehindLatest指标稳步增加或持续超过 1000(一秒),则可能是由于以下原因造成的:

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

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

  • 如果您的应用程序使用某个Amazon Lambda函数进行预处理或作为输出,请检查该应用程序的 InputProcessing.Duration 或LambdaDelivery. Durati CloudWatch on 指标。如果 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开发者指南》中的 “访问亚马逊 CloudWatch 指标”。

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