问题:任务正常运行,但是一直没有触发检查点,或者检查点失败各task检查点进度为0,手动触发检查点报错。
原因:任务有两个source,source1 运行几秒后相应的task 变为finished 状态,而存储 checkpoint 需要所有 task 处于 Running 状态。虽然无法存储 checkpoint ,但是不会影响任务的执行,所以没有曝出error信息。
解决:修改自定义source1 中重写的 run() 方法,加上while(true) 使source 保持running 状态。
附:
Flink Checkpoint 流程与原理
主要内容:
预检查,比如检查最大并发的 Checkpoint 数,最小的 Checkpoint 之间的时间间隔。默认情况下,最大并发的 Checkpoint 数为 1,最小的 Checkpoint 之间的时间间隔为 0.
判断所有 Source 算子的 Subtask (Execution) 是否都处于运行状态,同时检查所有待确认的算子的 SubTask(Execution)是否是运行状态,非running 状态报错。
创建 PendingCheckpoint,同时为该次 Checkpoint 创建一个 Runnable,即超时取消线程,默认 Checkpoint 十分钟超时。
循环遍历所有 Source 算子的 Subtask(Execution),最底层调用 Task 的triggerCheckpointBarrier, 广播 CheckBarrier 到下游 ,同时 Checkpoint 其状态。
下游的输入中有 CheckpointBarrierHandler 类来处理 CheckpoinBarrier,然后会调用 notifyCheckpoint 方法,通知 Operator SubTask 进行 Checkpoint。
每当 Operator SubTask 完成 Checkpoint 时,都会向 CheckpointCoordoritor 发送确认消息。CheckpointCoordinator 的 receiveAcknowledgeMessage 方法会进行处理。
在一次 Checkpoint 过程中,当所有从 Source 端到 Sink 端的算子 SubTask 都完成之后,CheckpointCoordoritor 会通知算子进行 notifyCheckpointCompleted 方法。文章来源:https://www.toymoban.com/news/detail-626496.html
参考:https://blog.csdn.net/u013474436/article/details/122204110文章来源地址https://www.toymoban.com/news/detail-626496.html
到了这里,关于Flink - checkpoint Failure reason: Not all required tasks are currently running的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!