本文为您介绍,如何配置Task快速重启,从而降低Failover对作业的影响。
背景信息
此功能为实验性功能,请在生产环境下谨慎使用,如遇问题请及时提交工单和技术支持部门取得联系。
通常,当Flink流作业中的某个Task发生异常时,为了保证数据一致性,同一个PipelineRegion的所有Task都会进行Failover。作业Failover后,Source节点需要从上一个Checkpoint位点开始消费数据。然而,在一些作业中,Task Failover后还需要下载大资源文件或者State数据。如果作业并发很高,所有Task进行一轮Failover的调度时间可能也会比较长。这些都会导致作业出现延迟或阻塞,一段时间内无法正常消费数据等问题,恢复正常运行所需的时间会更长。
Task快速重启配置可以有效缓解上述问题。配置Task快速重启后,当某个Task发生异常时,可以只重启失败的Task。从而避免由于非Source Task异常导致的Source Task回退到上一个Checkpoint位点重新消费数据的情况,减少由于Task取消、重启、追数据导致作业无法正常消费数据的时长。此外,还可以缓解高并发的情况下,所有Task进行一轮Failover的调度时间和初始化给集群造成的压力,从而降低Failover对作业的影响。
目前Task快速重启支持两种一致性语义:APPROXIMATE(不保证数据不丢失和重复)和AT_LEAST_ONCE(保证数据不丢失,不保证数据不重复)。其中APPROXIMATE语义无性能开销,而AT_LEAST_ONCE语义存在性能开销且需要额外使用对象存储OSS。
使用限制
不能在有限数据源的流作业中使用。
无法与Unaligned Checkpoint共同使用。
无法在批作业中使用。
同一个Session集群内无法同时运行未配置和配置了Task快速重启的作业。
若作业中有算子实现了prepareSnapshotPreBarrier方法,或在运行中会发送与Checkpoint相关的信息,则不可使用AT_LEAST_ONCE语义。
注意事项
语义 | 注意事项 |
APPROXIMATE |
|
AT_LEAST_ONCE |
|
操作步骤
进入Task快速重启配置入口。
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在 页面,单击目标作业名称。
在部署详情页签,单击运行参数配置区域右侧的编辑。
在其他配置中,增加如下代码信息。
若使用APPROXIMATE语义:
individual-task-failover.enabled: enabled_approximate shuffle-service-factory.class: org.apache.flink.runtime.io.network.IndividualRecoverableNettyShuffleServiceFactory
若使用AT_LEAST_ONCE语义:
individual-task-failover.enabled: enabled shuffle-service-factory.class: org.apache.flink.runtime.io.network.IndividualRecoverableNettyShuffleServiceFactory individual-task-failover.intermediate-checkpointing.interval: 适当的间隔,一般建议为cp周期的1/5到1/10,单位为ms。 classloader.check-leaked-classloader: false
如果您的作业使用的是Session模式的集群,则也需要在Session集群的配置中增加上述代码。Session集群配置详情请参见步骤一:创建Session集群。
单击保存。
在页面顶部,单击停止。
启动作业,详情请参见作业启动。