性能最佳实践 - Amazon Kinesis Data Analytics
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

性能最佳实践

本节介绍设计应用程序以提高性能的特殊注意事项。

正确管理扩展

本节包含有关管理应用程序级和操作员级扩展的信息。

正确管理应用程序扩

您可以使用自动缩放来处理应用程序活动中的意外峰值。如果满足以下条件,则会自动增加应用程序的 KPU:

  • 已为应用程序启用自动缩放功能。

  • 在 15 分钟内,CPU 使用率保持在 75% 以上。

如果启用了自动缩放,但 CPU 使用率没有保持在此阈值,则应用程序将不会扩展 KPU。如果您遇到不符合此阈值的 CPU 使用率飙升,或者在不同的使用量指标(例如)heapMemoryUtilization,手动增加扩展以允许您的应用程序处理活动峰值。

注意

如果应用程序通过 auto Scaling 自动添加了更多资源,则应用程序将在处于不活动状态一段时间后释放新资源。缩减资源将暂时影响性能。

有关扩展的更多信息,请参阅扩展.

正确管理运营商扩展

您可以通过验证应用程序的工作负载在工作进程之间均匀分配,以及应用程序中的操作员拥有稳定性和高性能所需的系统资源,可以提高应用程序的性能。

您可以使用parallelism设置。如果您没有为运算符设置并行度,它将使用应用程序级别的并行度设置。使用应用程序级并行度设置的操作员可能会使用应用程序可用的所有系统资源,从而使应用程序不稳定。

为了最好地确定每个运算符的并行度,请考虑运营商与应用程序中其他运算符相比的相对资源需求。将资源密集型运算符设置为比资源密集型较低的运算符更高的并行度设置。

应用程序的总运算符并行度是应用程序中所有运算符的并行度之和。您可以通过确定应用程序与应用程序可用的总任务槽之间的最佳比率来调整应用程序的总运算符并行度。总操作员并行度与任务槽之间的典型稳定比例为 4:1,也就是说,应用程序每四个可用的操作员子任务都有一个任务槽可用。拥有更多资源密集型运营商的应用程序可能需要 3:1 或 2:1 的比率,而资源密集型运营商的应用程序可能需要比例为 10:1 的稳定。

你可以使用以下方法为操作员设置比率运行时属性,因此您可以在不编译和上传应用程序代码的情况下调整运算符的并行度。

以下代码示例说明了如何将运算符并行度设置为当前应用程序并行度的可调比率:

Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties(); operatorParallelism = StreamExecutionEnvironment.getParallelism() / Integer.getInteger( applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio") );

有关子任务、任务槽和其他应用程序资源的信息,请参阅应用程序资.

要控制如何在应用程序的工作进程中分配工作负载,请使用Parallelism设置和KeyBy分区方法。有关更多信息,请参阅中的以下主题:Apache Flink 文档

监控外部依赖资源的使用

如果目标中存在性能瓶颈(例如 Kinesis Streams、Kinesis Data Firehose、DynamoDB 或OpenSearch服务),你的应用程序将遇到背压。验证外部依赖项是否已针对应用程序吞吐量正确配置。

注意

其他服务的故障可能会导致应用程序出现故障。如果你看到应用程序中的失败,请检查CloudWatch目标服务的日志是否出现故障。

在本地运行 Apache Flink 应用程序

要解决内存问题,您可以在本地 Flink 安装中运行应用程序。这将允许您访问在 Kinesis Data Analytics 中运行应用程序时不可用的调试工具,例如堆栈跟踪和堆转储。

有关创建本地 Flink 安装的信息,请参阅本地安装教程中的Apache Flink 文档.