本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
应用程序正在重新启动
如果你的应用程序运行不正常,它的 Apache Flink 作业会不断失败并重新启动。本节介绍这种情况的症状和故障排除步骤。
征兆
这种情况可能为以下症状可能为以下症状:
该
FullRestarts
指标不是零。此指标表示自您启动应用程序以来应用程序作业重新启动的次数。该
Downtime
指标不是零。此指标表示应用程序处于FAILING
或RESTARTING
状态的毫秒数。应用程序日志包含对
RESTARTING
或的状态更改FAILED
。您可以使用以下Logs Insights查询查询在应用程序 CloudWatch 日志中查询这些状态更改:分析错误:应用程序的任务相关故障.
原因和解决方法
以下情况可能会导致您的应用程序变得不稳定并反复重启:
操作员抛出异常:如果您的应用程序中某个运算符中的任何异常未得到处理,则应用程序会进行故障转移(通过解释为操作员无法处理故障)。应用程序从最新的检查点重新启动,以保持 “一劳永逸” 的处理语义。因此,
Downtime
在这些重启期间不为零。为了防止发生这种情况,我们建议您在应用程序代码中处理任何可重试的异常。您可以查询应用程序日志以确定应用程序状态是否从
RUNNING
变为FAILED
,以调查发生这种情况的原因。有关更多信息,请参阅分析错误:应用程序的任务相关故障:Kinesis Data Streams 的配置不正确:如果应用程序的源或接收器是 Kinesis 数据流,请检查该流的指标是否为
ReadProvisionedThroughputExceeded
或WriteProvisionedThroughputExceeded
错误。如果您看到这些错误,则可以通过增加流的分片数量来增加 Kinesis 流的可用吞吐量。有关更多信息,请参阅如何更改 Kinesis Data Streams 中打开的分片数量?
。 其他源或接收器未正确配置或不可用:验证您的应用程序是否正确配置了源和接收器。检查应用程序中使用的任何源或接收器(例如其他Amazon服务或外部源或目标)是否配置良好,没有遇到读取或写入限制,或者是否定期不可用。
如果您的依赖服务遇到与吞吐量相关的问题,请增加这些服务的可用资源,或者调查任何错误或不可用的原因。
运算符未正确配置:如果您的应用程序中某个运算符的线程工作负载未正确分配,则该运算符可能会过载,应用程序可能会崩溃。有关调整运算符并行性的信息,请参见正确管理操作员扩展。
-
应用程序失败 DaemonException:如果您使用的是 1.11 之前的 Apache Flink 版本,则此错误会出现在您的应用程序日志中。你可能需要升级到 Apache Flink 的更高版本,这样才能使用 0.14 或更高版本的 KPL 版本。
应用程序失败 TimeoutException,显示 FlinkException、或 RemoteTransportException:如果任务管理器崩溃,这些错误可能会出现在应用程序日志中。如果您的应用程序过载,您的任务管理器可能会承受 CPU 或内存资源压力,从而导致它们失败。
这些错误可能为以下与以下相相相相相相相似:
java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out
org.apache.flink.util.FlinkException: The assigned slot xxx was removed
org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager
要解决此问题,请检查以下内容:
检查您的 CloudWatch 指标,看看 CPU 或内存使用率是否出现异常峰值。
检查您的应用程序是否存在吞吐量问题。有关更多信息,请参阅性能排查的问题:
检查应用程序日志,查看应用程序代码引发的未处理异常。
应用程序失败并出现 “ JaxbAnnotationModule 未找到” 错误:如果您的应用程序使用 Apache Beam,但没有正确的依赖项或依赖项版本,则会出现此错误。使用 Apache Beam 的 Kinesis Data Analytics 应用程序必须使用以下版本的依赖关系:
<jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>
如果您没有提供正确的版本
jackson-module-jaxb-annotations
作为显式依赖项,则您的应用程序会从环境依赖项中加载该版本,并且由于版本不匹配,应用程序会在运行时崩溃。有关将 Apache Beam Kinesis Data Analytics,请参阅 CloudFormation 与 Kinesis Data Analytics 使用 Apache Beam 创建应用程序。