【问题标题】:Flink production session cluster in EKS instance failure and recoveryEKS 实例故障和恢复中的 Flink 生产会话集群
【发布时间】:2020-05-17 11:40:20
【问题描述】:

我是 Flink 的新手,计划在 EKS 上部署 Flink 会话集群,有 1 个作业管理器和 5 个任务管理器(每个任务管理器有 4 个插槽)。针对不同的用例,将通过 UI 提交不同的作业。

假设我已经提交了一个由 RocksDBStateBackend 支持的有状态作业(作业具有使用 RichFlatMapFunction 的简单计数器逻辑),其中 S3 checkpointDataUri 和 DbStoragePath 指向本地文件路径,并且该作业完全使用 8 个插槽,分布在两个任务管理器中并且运行良好一天没有任何问题。下面是我的问题,

1) 我对 RocksDBStateBackend 中 checkpointDataUri 和 DbStoragePath 的理解是,checkpointDataUri 将处理后的偏移信息存储在 S3 中(因为我配置了带有 S3 前缀的 checkpointDataUri),而 DbStoragePath 包含了 RichFlatMapFunction 中使用的所有状态信息。所以所有有状态的信息都存储在 checkpointDataUri 中,它只在本地可用。如有错误请指正。

2) 假设我的 Ec2 实例由于某种原因被重新启动(使用了 4 个插槽的那个)并且大约需要 30 分钟才能上线,在这种情况下,EKS 会将新的 Ec2 实例作为 TaskManager 来匹配副本,但是 Flink 作业管理器现在是否会尝试将 4 个插槽重新调度到不同的任务管理器?如果是,如何恢复存储在 Ec2 本地实例中的状态?

3) 有没有 Flink EKS 故障恢复相关的文档/视频。我看到了official documentation,它指定了如何在 EKS 中部署 Flink 会话集群。但我没有发现任何与 EKS 模式下的故障恢复相关的内容。有人可以为我指出正确的方向吗?

【问题讨论】:

    标签: apache-flink flink-streaming amazon-eks


    【解决方案1】:

    您关心的所有状态,即已处理的偏移量和RichFlatMapFunction 中使用的状态(以及 Flink 为您的作业管理的任何其他状态)都存储在本地磁盘 (DbStoragePath) 和 S3 中(检查点数据Uri)。

    Flink 始终为每个任务管理器保留一份本地状态的工作副本(以实现高吞吐量和低延迟),并在后台将此状态的完整副本复制到分布式文件系统(如 S3)以确保可靠性。

    换句话说,您在问题的第 (1) 点中所说的内容不正确。而第(2)点的答案是,如果本地不可用,要恢复的状态总是可以从 S3 恢复。至于第 (3) 点,与任何其他 Flink 部署模型相比,EKS 上的故障恢复没有什么特别之处。

    【讨论】:

    • 要明确一点,默认情况下,整个状态是否会存储到 s3 (checkpointDataUri) 或启用 environment.getCheckpointConfig().enableExternalizedCheckpoints ?一般来说,我的工作只有 environment.enableCheckpointing(2000, CheckpointingMode.EXACTLY_ONCE)
    • enableExternalizedCheckpoints 仅影响在作业失败或取消时是否保留检查点。默认情况下,检查点被认为“仅供 Flink 内部使用”,并在 Flink 不再使用它们进行恢复时被删除。默认情况下,整个状态将存储到 S3(启用检查点后)。
    • 非常感谢。我不确定为什么我在阅读文档时无法获得清晰的图片(不确定它是适合我还是我感到困惑)。但你的评论总是让我比文档更清楚。
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2020-04-26
    • 2019-11-20
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多