CN112379887A - 一种flink state状态迁移方案 - Google Patents

一种flink state状态迁移方案 Download PDF

Info

Publication number
CN112379887A
CN112379887A CN202011378098.6A CN202011378098A CN112379887A CN 112379887 A CN112379887 A CN 112379887A CN 202011378098 A CN202011378098 A CN 202011378098A CN 112379887 A CN112379887 A CN 112379887A
Authority
CN
China
Prior art keywords
state
data
flink
flash
scheme
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202011378098.6A
Other languages
English (en)
Inventor
尹春光
王全福
曹劼
吴晓兵
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianyi Electronic Commerce Co Ltd
Original Assignee
Tianyi Electronic Commerce Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianyi Electronic Commerce Co Ltd filed Critical Tianyi Electronic Commerce Co Ltd
Priority to CN202011378098.6A priority Critical patent/CN112379887A/zh
Publication of CN112379887A publication Critical patent/CN112379887A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • G06F8/454Consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种flink state状态迁移方案,本发明中一次flink state迁移的步骤主要分为以下三步:1.让flink作业完成state持久化到hdfs;2.在flink job代码中加入flink state数据,格式化输出到外部存储的代码;Flink支持从指定的版本的数据进行恢复,这里仅仅使用flink的程序加载指定版本的数据,只在job在初始化的时候完成将state数据格式化输出到外部存储;3.在新的版本的flink作业中进行加载对应的task的状态数据本方案提出flink运行时dump计算状态,状态恢复时加载自定义的数据结构来支持计算拓扑变化,计算状态类型变化等方案,从而保证数据计算的一致性。

Description

一种flink state状态迁移方案
技术领域
本发明涉及支付、金融领域,特别涉及一种flink state状态迁移方案。
背景技术
在流计算场景中,数据没有边界源源不断的流入的,每条数据流入都可能会触发计算,比如在进行count或sum这些操作,是选择每次触发计算将所有流入的历史数据重新计算一边还是每次计算都基于上次计算结果进行增量计算呢?从综合考虑角度,很多人都会选择增量计算,那么问题就产生了:上一次的中间计算结果保存在哪里?内存?这其中会由于本身的网络,硬件或软件等问题造成某个计算节点失败,对应的上次计算结果就会丢失,在节点恢复时,是需要将所有历史数据重新计算一遍的,对于这样的结果大家是很难接受的。
flink运行计算任务的过程中,会有很多中间处理过程。在整个任务运行的过程中,中间存在着多个临时状态,比如说某些数据正在执行一个operator,但是只处理了一半数据,另外一般还没来得及处理,这也是一个状态。如果这时候我们没有存储中间计算的状态,那么就意味着重启这个计算任务时,需要从头开始将原来处理过的数据重新计算一遍。如果存储了中间状态,就可以恢复到中间状态,并从该状态开始继续执行任务。这就是状态管理的意义。所以需要一种机制去保存记录执行过程中的中间状态,这种机制就是状态管理机制。
但是当flink作业的物理计算拓扑发生变化了,如果程序未设置程序算子的唯一ID或是在flink状态类型发生变化,在Job升级的时候,就会导致flink state加载失败。同时存在flink state的类型转换的时候就会产生状态丢失。
发明内容
本发明要解决的技术问题是克服现有技术的缺陷,提供一种flink state状态迁移方案,flink在实时计算方案中,flink state起到容错,计算一致性等保障。本发明旨在基于state状态导出机制,对计算拓扑发生变化时能够保障应用程序state恢复完成,从而保证计算结果的一致性。
为了解决上述技术问题,本发明提供了如下的技术方案:
本发明一种flink state状态迁移方案,基于以下四种场景的flink state都不能完成状态迁移的条件下:
一、flink计算job算子未设置唯一标识;
二、或是唯一标识发生变化;
三、算子类型与state类型变化;
四、多个算子都依赖之前的一个状态的场景;
采用运行状态迁移方案来实现flink job的一致性;具体如下所示:
S1.将运行时flink的state数据进行savepoint到hdfs;
S2.启动job将savepoint数据格式化后的外部存储;
S3.启动新的job从外部存储初始化stateful operation算子状态数据;
完成一次flink state迁移的步骤主要分为以下三步:
1.让flink作业完成state持久化到hdfs;
2.在flink job代码中加入flink state数据,格式化输出到外部存储的代码;Flink支持从指定的版本的数据进行恢复,这里仅仅使用flink的程序加载指定版本的数据,只在job在初始化的时候完成将state数据格式化输出到外部存储;
3.在新的版本的flink作业中进行加载对应的task的状态数据。
与现有技术相比,本发明的有益效果如下:
本方案提出flink运行时dump计算状态,状态恢复时加载自定义的数据结构来支持计算拓扑变化,计算状态类型变化等方案,从而保证数据计算的一致性。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的实施例示意图之一;
图2是本发明的实施例示意图之二;
图3是本发明的实施例示意图之三;
图4是本发明的实施例示意图之四;
图5是本发明的实施例示意图之五;
图6是本发明的实施例示意图之六;。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1
如图1所示,flink source和stateful的算子在计算过程中都会定期将自己的state持久化到hdfs存储来实现高可用。Flink定期进行状态持久化,在同一个版本的状态中,包含了source和stateful operation的算子的状态信息,Flink的source持久化的状态信息包含当前版本信息和source所有分区以及offset信息,stateful operation算子存储了算子运算状态数据,能够保证当前计算状态的一致性。
原生的flink state状态恢复功能仅支持flink算子设置唯一标识ID,且flinkstate类型没有发生变化,以下四种场景的flink state都不能完成状态迁移。
一、flink计算job算子未设置唯一标识;
二、或是唯一标识发生变化;
三、算子类型与state类型变化;
四、多个算子都依赖之前的一个状态的场景。
那么此时就需要采用运行状态迁移方案来实现flink job的一致性。
具体的设计方案如下:
一、将运行时flink的state数据进行savepoint到hdfs
二、启动job将savepoint数据格式化后的外部存储
三、启动新的job从外部存储初始化stateful operation算子状态数据
如图2,新的Job依赖了老Job的的作业如图那么此时就无法完成数据恢复。因为在Stateful Operation1和Stateful Operation2无法同时设置一样的算子ID,同时StatefulOperation1依赖了两个状态,也就无法同时设置两个算子ID,这些情况都无法完成旧的状态加载。按照这个例子来,采用本方案来实现flink state迁移。
完成一次flink state迁移的步骤主要分为以下三步:
1.让flink作业完成state持久化到hdfs;如图3所示。
2.在flink job代码中加入flink state数据,格式化输出到外部存储的代码。Flink支持从指定的版本的数据进行恢复,这里仅仅使用flink的程序加载指定版本的数据,只在job在初始化的时候完成将state数据格式化输出到外部存储(如图4所示)。
在数据格式化输出的时候整体的思路如下:
按照flink state的类型来进行讨论,针对operate state在进行state的迁移过程中,涉及flink job state并行度发生变化的时候,flink的operate state仍然能够保证算子的业务的准确性,但是flink keyed state在进行算子并行度改变的时候,涉及到state发生变化。目前针对flink keyed state迁移来讨论数据的格式化方案涉及。
在flink keyed state计算过程中,state的相关数据是跟对应的taskId绑定的,如果flink的并行度和最大并行度发生变化的时候,flink的旧的state的数据,在未来会分配到运行时的哪一个task上就会依赖了两个参数,新的job的并行度和最大并行度。两种实现方式,
一、将所有的数据导出到外部存储,由新的job来进行选择性加载(不适合state数据量比较大的场景)
二、由老job来完成根据新job并行度和最大并行度来分配数据(适合state数据量较大的场景)
本方案采用第二种方案来实现数据的迁移,老的job的运行状态的并行度为4,新的job的并行度为3,(最大并行度相同)。stateName1的状态数据存储如图5所示。
3.在新的版本的flink作业中进行加载对应的task的状态数据。
按照图6所示的数据迁移方案,能够完成从source到stateful operation的完整的state迁移方案,保证数据的一致性。
当前,关于flink状态恢复方案还是基于flink的自带的状态恢复机制,如果flink算子拓扑发生变化,或是算子类型的状态发生变化;都会造成flink作业状态数据丢失,本方案提出flink运行时dump计算状态,状态恢复时加载自定义的数据结构来支持计算拓扑变化,计算状态类型变化等方案,从而保证数据计算的一致性。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (1)

1.一种flink state状态迁移方案,其特征在于,基于以下四种场景的flink state都不能完成状态迁移的条件下:
一、flink计算job算子未设置唯一标识;
二、或是唯一标识发生变化;
三、算子类型与state类型变化;
四、多个算子都依赖之前的一个状态的场景;
采用运行状态迁移方案来实现flink job的一致性;具体如下所示:
S1.将运行时flink的state数据进行savepoint到hdfs;
S2.启动job将savepoint数据格式化后的外部存储;
S3.启动新的job从外部存储初始化stateful operation算子状态数据;
完成一次flink state迁移的步骤主要分为以下三步:
S1.让flink作业完成state持久化到hdfs;
S2.在flink job代码中加入flink state数据,格式化输出到外部存储的代码;Flink支持从指定的版本的数据进行恢复,这里仅仅使用flink的程序加载指定版本的数据,只在job在初始化的时候完成将state数据格式化输出到外部存储;
S3.在新的版本的flink作业中进行加载对应的task的状态数据。
CN202011378098.6A 2020-11-30 2020-11-30 一种flink state状态迁移方案 Pending CN112379887A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011378098.6A CN112379887A (zh) 2020-11-30 2020-11-30 一种flink state状态迁移方案

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011378098.6A CN112379887A (zh) 2020-11-30 2020-11-30 一种flink state状态迁移方案

Publications (1)

Publication Number Publication Date
CN112379887A true CN112379887A (zh) 2021-02-19

Family

ID=74589332

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011378098.6A Pending CN112379887A (zh) 2020-11-30 2020-11-30 一种flink state状态迁移方案

Country Status (1)

Country Link
CN (1) CN112379887A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113254106A (zh) * 2021-06-23 2021-08-13 中国平安人寿保险股份有限公司 基于Flink的任务执行方法、装置、计算机设备及存储介质
CN114661248A (zh) * 2022-05-25 2022-06-24 恒生电子股份有限公司 数据处理方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113254106A (zh) * 2021-06-23 2021-08-13 中国平安人寿保险股份有限公司 基于Flink的任务执行方法、装置、计算机设备及存储介质
CN113254106B (zh) * 2021-06-23 2022-04-19 中国平安人寿保险股份有限公司 基于Flink的任务执行方法、装置、计算机设备及存储介质
CN114661248A (zh) * 2022-05-25 2022-06-24 恒生电子股份有限公司 数据处理方法及装置

Similar Documents

Publication Publication Date Title
CN108052355B (zh) 星载载荷单元软件在轨重组方法
US20190220356A1 (en) Data Processing Method, System, and Apparatus
US9772906B2 (en) Disaster recovery systems and methods
CN112379887A (zh) 一种flink state状态迁移方案
US20170031613A1 (en) Disaster recovery systems and methods
CN104932953A (zh) 一种数据分发方法、数据存储方法、相关装置以及系统
CN102902561B (zh) 数据存储方法及数据存储系统
JPH06290092A (ja) 記憶装置へのファイル格納装置
CN111078662A (zh) 一种区块链数据存储方法与装置
CN106789741A (zh) 消息队列的消费方法及装置
WO2021012868A1 (zh) 事务回滚方法及装置、数据库、系统、计算机存储介质
US7711891B1 (en) Method, system, and computer-readable medium for updating memory devices in a computer system
CN103678051A (zh) 一种集群数据处理系统中的在线故障容错方法
CN112486639A (zh) 任务的数据保存及恢复方法、装置、服务器及存储介质
US20140351508A1 (en) Offloading raid update operations to disk controllers
US10671482B2 (en) Providing consistency in a distributed data store
CN112631994A (zh) 数据迁移方法及系统
WO2024036829A1 (zh) 一种数据融合方法、装置、设备及存储介质
CN115878381A (zh) 基于srm盘的数据恢复方法及装置、存储介质、电子装置
CN110297860B (zh) 数据交换方法、装置及相关设备
CN113672349A (zh) 一种镜像的更新方法、装置、设备及介质
CN114327246A (zh) 存储介质内数据存储方法、存储介质及计算机设备
CN116661708B (zh) 基于硬盘阵列的读写任务的处理方法和电子设备
US20230367583A1 (en) Update management system and update management method
CN110943871B (zh) 一种资源区间调整方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20210219

WD01 Invention patent application deemed withdrawn after publication