

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

# 使用 EKS 上的 Amazon EMR 上的 Flink 正常停用竞价型实例
<a name="jobruns-flink-decommission"></a>

使用 EKS 上的 Amazon EMR 的 Flink 可以在任务恢复或扩展操作期间缩短作业的重启时间。

## 概述
<a name="jobruns-flink-decommission-overview"></a>

EKS 上的 Amazon EMR 发行版 6.15.0 及更高版本支持在带有 Apache Flink 的 EKS 上的 Amazon EMR 中正常停用竞价型实例上的任务管理器。作为此功能的一部分，带有 Flink 的 EKS 上的 Amazon EMR 提供了以下功能：
+ **Just-in-time check** pointing — Flink 流式传输作业可以响应竞价型实例中断，对正在运行的作业执行 just-in-time (JIT) 检查点，并防止在这些竞价型实例上安排其他任务。默认和自适应计划程序支持 JIT 检查点。
+ **组合重启机制**：组合重启机制会在作业达到目标资源并行度或当前配置窗口结束后尽最大努力尝试重新启动作业。这样做还可以防止由于多次竞价型实例终止而导致作业连续重启。组合重启机制仅适用于自适应计划程序。

这些功能具有以下优势：
+ 您可以利用竞价型实例来运行任务管理器并降低集群开支。
+ 竞价型实例任务管理器的活动性提高使弹性得到提高，作业计划的效率提升。
+ 您的 Flink 作业将有更长的正常运行时间，因为竞价型实例终止后的重启次数将会减少。

## 正常停用的工作原理
<a name="jobruns-flink-decommission-howitworks"></a>

考虑以下示例：您预调配了运行 Apache Flink 的 EKS 上的 Amazon EMR，为作业管理器指定了按需节点，为任务管理器指定了竞价型实例节点。终止前两分钟，任务管理器收到中断通知。

在这种情况下，作业管理器将处理竞价型实例中断信号，阻止在竞价型实例上计划其他任务，并为流式传输作业启动 JIT 检查点。

然后，只有在当前重启间隔窗口内有足够的新资源可用来满足当前作业并行度之后，作业管理器才会重新启动任务图。重启窗口间隔是根据竞价型实例替换持续时间、新的任务管理器容器组（pod）的创建以及向作业管理器的注册来决定的。

## 先决条件
<a name="jobruns-flink-decommission-prereqs"></a>

要使用正常停用，请在运行 Apache Flink 的 Amazon EMR on EKS 集群上创建并运行流处理作业。启用在至少一个竞价型实例上计划的自适应计划程序和任务管理器，如以下示例所示。您应该为作业管理器使用按需节点，并且只要至少有一个竞价型实例，您就可以将按需节点用于任务管理器。

```
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: deployment_name
spec:
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
    cluster.taskmanager.graceful-decommission.enabled: "true"
    execution.checkpointing.interval: "240s"
    jobmanager.adaptive-scheduler.combined-restart.enabled: "true"
    jobmanager.adaptive-scheduler.combined-restart.window-interval : "1m"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
    nodeSelector:
      'eks.amazonaws.com/capacityType': 'ON_DEMAND'
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
    nodeSelector:
      'eks.amazonaws.com/capacityType': 'SPOT'
  job:
    jarURI: flink_job_jar_path
```

## 配置
<a name="jobruns-flink-decommission-config"></a>

本部分涵盖了您可以根据自己停用需求指定的大多数配置。


| Key | 说明 | 默认 值 | 可接受值 | 
| --- | --- | --- | --- | 
|  cluster.taskmanager.graceful-decommission.enabled  |  启用任务管理器的正常停用。  |  true  |  true, false  | 
|  jobmanager.adaptive-scheduler.combined-restart.enabled  |  在自适应计划程序中启用组合重启机制。  |  false  |  true, false  | 
|  jobmanager.adaptive-scheduler.combined-restart.window-interval  |  为作业执行合并重启的合并重启窗口间隔。不含单位的整数将被解释为毫秒。  |  1m  |  示例：30、60s、3m、1h。 | 