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

Kinesis Data Analytics for Java Applications 的最佳实践

本节包含有关开发稳定的高性能 Amazon Kinesis Data Analytics 应用程序的信息和建议。

容错:检查点和保存点

使用检查点和保存点在 Kinesis Data Analytics for Java Applications 应用程序中实施容错功能。在开发和维护应用程序时,请牢记以下几点:

  • 我们建议您为应用程序启用检查点。如果由于服务问题、应用程序依赖项故障和其他问题而导致意外故障,检查点可以为应用程序提供容错功能。

  • 在应用程序开发或故障排除期间,将 ApplicationSnapshotConfiguration::SnapshotsEnabled 设置为 false。在每次应用程序停止期间,将会创建一个快照;如果应用程序处于不正常状态或性能不佳,则可能会出现问题。在应用程序处于生产状态并保持稳定后,将 SnapshotsEnabled 设置为 true

    为了使用正确的状态数据正确地重新启动应用程序,我们建议应用程序每 5-10 分钟创建一个快照。

    有关监控应用程序停机时间的信息,请参阅指标与维度

有关实施容错功能的更多信息,请参阅容错能力

性能和并行度

应用程序可以调整应用程序并行度并避免性能陷阱,从而进行扩展以满足任何吞吐量级别要求。在开发和维护应用程序时,请牢记以下几点:

  • 验证是否充分预置了所有应用程序源和接收器,而不会受到限制。如果源和接收器是其他 AWS 服务,请使用 CloudWatch 监控这些服务。

  • 对于并行度较高的应用程序,请检查是否将较高的并行度应用于应用程序中的所有操作符。默认情况下,Apache Flink 为应用程序图中的所有操作符应用相同的应用程序并行度。这可能会导致在源或接收器上出现预置问题,或者出现操作符数据处理瓶颈。您可以使用 setParallelism 更改代码中的每个操作符的并行度。

  • 了解应用程序中的操作符的并行度设置的含义。如果更改操作符的并行度,您可能无法从操作符并行度与当前设置不兼容时创建的快照中还原应用程序。有关设置操作符并行度的更多信息,请参阅为操作符显式设置最大并行度

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

日志记录

您可以使用 CloudWatch Logs 监控应用程序的性能和错误情况。为应用程序配置日志记录时,请牢记以下几点:

  • 为应用程序启用 CloudWatch 日志记录,以便可以调试任何运行时问题。

  • 不要为应用程序中处理的每条记录创建一个日志条目。这会在处理期间出现严重瓶颈,并且可能会导致数据处理反向压力。

有关实施日志记录的更多信息,请参阅日志记录和监控

编码

您可以使用建议的编程做法以提高应用程序性能和稳定性。在编写应用程序代码时,请牢记以下几点:

  • 不要在应用程序代码(应用程序的 main 方法或用户定义的函数)中使用 system.exit()。如果要从代码中关闭应用程序,请引发一个从 ExceptionRuntimeException 派生的异常,其中包含有关应用程序出现的错误的消息。

    请注意下面有关该服务如何处理此类异常的信息:

    • 如果异常是从应用程序的 main 方法中引发的,在应用程序转变为 RUNNING 状态时,该服务将其封装在 ProgramInvocationException 中,并且作业管理器无法提交作业。

    • 如果异常是从用户定义的函数中引发的,作业管理器使作业失败并重新启动,并将异常详细信息写入到异常日志中。

  • 请考虑为应用程序 JAR 文件及其包含的依赖项填充阴影。如果应用程序和 Apache Flink 运行时的程序包名称存在潜在的冲突,则建议填充阴影。如果发生冲突,则应用程序日志可能包含 java.util.concurrent.ExecutionException 类型的异常。有关为应用程序 JAR 文件填充阴影的更多信息,请参阅 Apache Maven Shade 插件