Flink有状态计算的状态容错

news/2024/11/25 17:23:51/

状态容错 State Fault Tolerance

首先来说一说状态容错。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候,重新恢复计算的数据可以从状态中恢复,并且每条数据只被计算了一次呢?

从数据的流入到计算流出,整个过程看成事务的话,就是如何保证整个过程具有原子性。

Flink 是怎么做的呢?只靠状态本身是远远不够的,状态只是保存了某个值,还需要保存一个计算的位置。

如果是单机的情况下,这个很好实现。

假设来自 Kafka 的数据流,经过应用逻辑的计算,生成状态保存到 state 中,这个过程是源源不断的,如图所示,为了保证state的容错性,程序会周期性的保存数据消费的位置和该时刻的状态,叫做快照,如果程序有异常需要重启的时候,就会从快照中恢复。这个过程保证了精准一次的计算,一条数据只会被计算一次。

分布式环境下没有这个简单,众所周知,任何问题到了分布式环境下,就变得复杂。

Flink 是如何做到状态分布式容错的呢?如何在不中断计算的情况下产生快照呢?

如图,Flink 会在数据流中插入 checkpoint barrier n ,他们会随着数据的流向流入下游的算子,首先记录开始的位置,然后每经过一个算子就记录该算子计算之后的状态,直至结束。

上图只一个静态图,下面我将演示整个过程。

第一步,记录数据开始计算的位置

第二步,记录各个算子的名称以及 state

以此类推到整个 DAG 的结束。(DAG 是有向无环图)

整个过程 checkpoint barrier 会同时存在多个,也就是数据流中插入的多个 checkpoint barrier ,当算子遇到它的时候,就会发生 checkpoint。

只有就会在不中断计算的情况下,生成全局一致的快照。

应用

默认情况下,检查点不被保留,只用于从失败中恢复作业。当程序取消时,它们将被删除。但是,您可以配置要保留的定期检查点。根据配置,这些保留的检查点不会在作业失败或取消时自动清除。这样,如果您的工作失败,您将有一个检查点可以从中恢复。

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

配置 checkpoint 目录

state.checkpoints.dir: hdfs:///checkpoints/

或者给每个 job 配置目录:

env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));

虽然检查点可以用来容错,但是一般我们不用检查点来恢复程序,如果修改了任务的逻辑或其他原因导致程序需要重启,那就需要用到 savepoint 。


http://www.ppmy.cn/news/82492.html

相关文章

CMake常用命令总结与练习

CMake常用命令总结 前言cmake_minimum_required (VERSION XX):CMake最低版本project (demo):CMake工程名add_executable(main main.c):生成可执行文件aux_source_directory(dir var):指定源文件放入变量set(val src):指定源文件放入变量include_director…

【AUTOSAR】【以太网】SomeIpTp

目录 一、概述 二、限制与约束 三、功能说明 3.1 SOME/IP帧头 3.1.1 消息类型字段

【设计模式】习题选择

设计模式习题 统一建模语言基础知识 1、在UML提供的图中,( )用于描述系统与外部系统及用户之间的交互; A、用例图 B、类图 C、对象图 D、部署图 2【单选题】 在UML提供的图中,( )用于按时间顺序…

测试计划编写说明

第1章 引言 1.1目的 简述本计划的目的,旨在说明各种测试阶段任务、人员分配和时间安排、工作规范等。 测试计划在策略和方法的高度说明如何计划、组织和管理测试项目。测试计划包含足够的信息使测试人员明白项目需要做什么是如何运作的。另外,清晰的文档结构能使任何一个读…

阿里云数据库独有功能

RDS MySQL读写分离如何确保数据读取的时效性 阿里云内部网络会确保同步日志在主实例和只读实例间的实时传输,正常情况下只读实例不会有延迟产生。但受限于MySQL本身的复制机制,若同步日志的应用时间较久,会产生数据同步的延迟,这个…

A small program development similar to the WeChat small program type

A WeChat Mini Program is indeed different from developing a small-scale traditional software program. Let’s look at the steps involved in developing a WeChat Mini Program: Account Setup: To develop a WeChat Mini Program, you’ll first need to sign up for…

sql注入详解+docker靶场搭建举例

本文将详细介绍 SQL 注入攻击的概念、原理、危害以及防御措施,包括常见的 SQL 注入攻击方式,并实际演示 SQL 注入攻击的过程,帮助读者深入了解 SQL 注入攻击并学会防范和应对。 一、SQL 注入攻击概述 1.1 什么是 SQL 注入攻击? …

一文读懂如何将 Rancher 下游集群升级到 Kubernetes v1.25

介 绍 最初在 Kubernetes v1.21 中被弃用的 PodSecurityPolicy API,已经在 Kubernetes v1.25 中被完全删除。由于 API 被移除,你无法在 Kubernetes v1.25 集群中创建、编辑或查询 PodSecurityPolicy 资源。此外,由于其准入控制器已被移除&am…