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

Apache flink EKS实例中的Flink生产会话群集故障与恢复,apache-flink,flink-streaming,amazon-eks,Apache Flink,Flink Streaming,Amazon Eks,我是Flink的新手,计划在EKS上部署Flink会话集群,配置1个作业管理器和5个任务管理器(每个任务管理器有4个插槽)。对于不同的用例,将通过UI提交不同的作业 假设我提交了一个有状态作业(作业具有使用RichFlatMapFunction的简单计数器逻辑),由RocksDBStateBackend支持,S3 checkpointDataUri和DbStoragePath指向本地文件路径,该作业总共使用8个插槽,分布在两个任务管理器中,一天内运行良好,没有任何问题。下面是我的问题, 1) 我

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

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

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

2) 假设我的Ec2实例因某种原因重新启动(使用了4个插槽的那个实例),并花费了大约30分钟才能联机,在这种情况下,EKS将使新的Ec2实例作为TaskManager来匹配副本,但是Flink job manager现在是否会尝试将4个插槽重新安排到不同的task manager?如果是,如何恢复Ec2本地实例中存储的状态


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

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

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


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

只是想弄清楚,默认情况下,整个状态是存储到s3(checkpointDataUri),还是启用environment.getCheckpointConfig().enableExternalizedCheckpoints?一般来说,我的作业只有环境。启用检查点(2000,CheckpointMode.Justice_ONCE)
enableExternalizedCheckpoints
仅影响作业失败或取消时是否保留检查点。默认情况下,检查点被视为“仅供Flink内部使用”,并在Flink不再将其用于恢复时删除。默认情况下,整个状态将存储到S3(一旦启用了检查点)。非常感谢。我不确定为什么我在阅读文档时无法获得清晰的图片(不确定它是否只适合我或我感到困惑)。但你的评论总是让我比文档更清楚。