EKS实例中Flink生产会话集群的故障与恢复


0

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

假设我提交了一个有状态的 job( job使用RichFlatMapFunction有简单的计数器逻辑),由RocksDBStateBackend支持,S3 checkpointDataUri和DbStoragePath指向 local文件路径,这个 job总共使用了8个槽位,分布在两个任务管理器中,运行一天没有任何问题。下面是我的问题,

1) 我对RocksDBStateBackend中checkpointDataUri和DbStoragePath的理解是,checkpointDataUri将处理后的偏移量信息存储在S3中(因为我将checkpointDataUri配置为S3前缀),DbStoragePath包含RichFlatMapFunction中使用的所有状态信息。因此,所有的状态信息都存储在checkpointDataUri中,而checkpointDataUri只在 local可用。如果是错的,请纠正我。

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

3) 是否有关于Flink EKS故障恢复的文件/视频。我看到了官方文档,它指定了如何在EKS中部署Flink会话集群。但我没有发现任何与EKS模式下的故障恢复相关的东西。有人能给我指一下这个问题的正确方向吗?

1 答案


0

您关心的所有状态,即已处理的偏移量和RichFlatMapFunction中使用的状态(以及Flink为您的 job管理的任何其他状态)都存储在 local磁盘(DbStoragePath)和S3(checkpointDataUri)中。

Flink总是在每个任务管理器 local保存一个所有状态的 job 副本(以实现高吞吐量和低延迟),并在后台将该状态的完整副本复制到分布式文件系统(如S3)中,以提高可靠性。

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


我来回答

写文章

提问题

面试题