掌桥专利:专业的专利平台
掌桥专利
首页

一种Flink框架的顺序写方法、装置及电子设备

文献发布时间:2023-06-19 11:26:00


一种Flink框架的顺序写方法、装置及电子设备

技术领域

本发明涉及数据处理技术领域,特别是涉及一种Flink框架的顺序写方法、装置及电子设备。

背景技术

Flink框架作为一种面向分布式数据流处理和批量数据处理的开源计算框架被广泛应用于数据处理领域。Flink框架可以将数据并行的写入多个待写入节点中。

但是在一些应用场景中,出于实际需求可能需要将数据按照一定顺序依次写入多个不同的待写入节点中。而相关技术中的Flink框架不支持顺序写入,因此在这些应用场景中无法使用Flink框架。

发明内容

本发明实施例的目的在于提供一种Flink框架的顺序写方法、装置及电子设备,以实现Flink框架能够将数据按照顺序写入多个待写入节点。具体技术方案如下:

在本发明实施例的第一方面,提供了一种Flink框架的顺序写方法,应用于Flink框架,所述Flink框架包括多个待写入节点,所述方法包括:

将待写入目标节点的数据分批次缓存至所述目标节点对应的Flink State中,所述目标节点为所述多个待写入节点中除终端节点以外的任一节点,所述终端节点为所述多个待写入节点中按照预设顺序位于末位的待写入节点;

依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点;

在成功将该批数据刷新到所述目标节点后,将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中,所述下游节点为所述多个待写入节点中按照预设顺序位于所述目标节点下一位的待写入节点。

在一种可能的实施例中,在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,所述方法还包括:

每当成功将该批数据刷新到所述目标节点时,更新数据标识,所述数据标识用于表示已经成功刷新至所述目标节点的批数据;

所述在成功将该批数据刷新到所述目标节点后,将该批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中,包括:

将所述数据标识所表示的每批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中。

在一种可能的实施例中,在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,所述方法还包括:

每当该批数据刷新到所述目标节点失败时,确定已经将该批数据刷新到所述目标节点的次数;

如果所述次数不大于预设次数阈值,重新将该批数据刷新到所述目标节点;

如果所述次数大于所述预设次数阈值,持久化用于表示所述Flink框架状态的快照。

在一种可能的实施例中,所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点,包括:

判断是否达到预设条件,所述预设条件包括以下条件中的一种或多种条件:所述目标节点对应的Flink State中缓存的数据批数大于预设批数阈值,所述目标节点对应的Flink State中缓存的数据的数据量大于预设数据量阈值,距离上次将批数据通过flush函数刷新到所述目标节点的时长大于预设间隔阈值;

如果达到所述预设条件,依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点。

在一种可能的实施例中,在所述将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中之后,所述方法还包括:

在经过预设清理时长后,在所述目标节点对应的Flink State中删除该批数据。

在一种可能的实施例中,所述将该批数据通过flush函数刷新到所述目标节点,包括:

将该批数据按照预设的用户自定义规则,进行project投影;

调用批量写入函数将经过投影的数据写入所述目标节点的客户端的缓存中;

调用所述客户端的flush函数将该批数据刷新到所述目标节点。

在本发明实施例的第二方面,提供了一种Flink框架的顺序写装置,应用于Flink框架,所述Flink框架包括多个待写入节点,所述方法包括:

缓存写入模块,用于将待写入目标节点的数据分批次缓存至所述目标节点对应的Flink State中,所述目标节点为所述多个待写入节点中除终端节点以外的任一节点,所述终端节点为所述多个待写入节点中按照预设顺序位于末位的待写入节点;

数据刷新模块,用于依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点;

下游发送模块,用于在成功将该批数据刷新到所述目标节点后,将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中,所述下游节点为所述多个待写入节点中按照预设顺序位于所述目标节点下一位的待写入节点。

在一种可能的实施例中,在所述数据刷新模块在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,还用于每当成功将该批数据刷新到所述目标节点时,更新数据标识,所述数据标识用于表示已经成功刷新至所述目标节点的批数据;

所述下游发送模块在成功将该批数据刷新到所述目标节点后,将该批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中,包括:

将所述数据标识所表示的每批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中。

在一种可能的实施例中,在所述下游发送模块在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,还用于每当该批数据刷新到所述目标节点失败时,确定已经将该批数据刷新到所述目标节点的次数;如果所述次数不大于预设次数阈值,重新将该批数据刷新到所述目标节点;如果所述次数大于所述预设次数阈值,持久化用于表示所述Flink框架状态的快照。

在一种可能的实施例中,所述数据刷新模块依次针对所述目标节点对应的FlinkState中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点,包括:

判断是否达到预设条件,所述预设条件包括以下条件中的一种或多种条件:所述目标节点对应的Flink State中缓存的数据批数大于预设批数阈值,所述目标节点对应的Flink State中缓存的数据的数据量大于预设数据量阈值,距离上次将批数据通过flush函数刷新到所述目标节点的时长大于预设间隔阈值;

如果达到所述预设条件,依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点。

在一种可能的实施例中,所述下游发送模块在所述将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中之后,还用于在经过预设清理时长(clean time)后,在所述目标节点对应的Flink State中删除该批数据。

在一种可能的实施例中,所述数据刷新模块将该批数据通过flush函数刷新到所述目标节点,包括:

将该批数据按照预设的用户自定义规则,进行project投影;

调用批量写入函数将经过投影的数据写入所述目标节点的客户端的缓存中;

调用所述客户端的flush函数将该批数据刷新到所述目标节点。

在本发明实施例的第三方面,提供了一种电子设备,包括:

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述第一方面任一所述的方法步骤。

在本本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一所述的方法步骤。

本发明实施例有益效果:

本发明实施例提供的Flink框架的顺序写方法、装置及电子设备,可以通过SQL(Structured Query Language,结构化查询语言)的LATERAL TABLE(侧边表)自定义TableFunction(表函数)的方式更改数据在Flink框架中的写入逻辑,从而实现Flink框架能够将数据按照顺序写入多个待写入节点。

当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明实施例提供的Flink框架的一种工作原理示意图;

图2为本发明实施例提供的Flink框架的顺序写方法的一种流程示意图;

图3为本发明实施例提供的Flink框架的另一种工作原理示意图;

图4为本发明实施例提供的writeFlinkState函数的原理示意图;

图5为本发明实施例提供的invoke函数的原理示意图;

图6为本发明实施例提供的collect2DownTask函数的原理示意图;

图7为本发明实施例提供的snapshot函数的原理示意图;

图8为本发明实施例提供的Flink框架的顺序写装置的一种结构示意图;

图9为本发明实施例提供的电子设备的一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了更清楚的对本发明实施例提供的Flink框架的顺序写方法进行说明,下面将对本发明实施例提供的Flink框架的顺序写方法的一种可能的应用场景进行示例性的说明。可以理解的是,以下示例仅是本发明实施例提供的Flink框架的顺序写方法的一种可能的应用场景,在其他可能的实施例中,本发明实施例提供的Flink框架的顺序写方法也可以应用于其他可能的应用场景,以下示例对此不作任何限制。

在一种可能的应用场景中,待写入节点包括ES(Elasticsearch,一种基于Lucene的搜索服务器)、HBase(一种分布式的面向列的开源数据库)以及Kafka(一种分布式消息处理系统)中。其中,ES中用于存储数据的索引,Hbase中用于存储数据的详细信息。

则相关技术中,Flink框架的工作原理可以如图1所示,kafka主题(Kafka Topic)中包括多个Kafka分区(kafka patition),各个Kafka分区中的数据通过Flink框架输出至ES和通过侧输出的方式同步输出至Hbase中。如果如图1所示,数据成功写入ES成功但是数据写入Hbase失败,则可能导致数据的索引能够在ES中查询到,但是无法在Hbase中查询到该数据的详细信息。即导致ES和Hbase中的数据不一致。

因此,在该应用场景中需要将数据先写入ES再写入Hbase中,最后写入Kafka中,而相关技术中的Flink框架并不支持顺序写入多个不同的待写入节点。因此该应用场景中无法使用Flink框架。

基于此,本发明实施例提供了一种Flink框架的顺序写方法,应用于Flink框架,Flink框架包括多个待写入节点,方法可以参见图2所示,可以包括:

S201,将待写入目标节点的数据分批次缓存至目标节点对应的Flink State中。

S202,依次针对目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到目标节点。

S203,在成功将该批数据刷新到目标节点后,将该批数据作为目标节点的下游节点的待写入数据,通过collector上下文缓存至下游节点对应的Flink State中。

选用该实施例,可以通过SQL(Structured Query Language,结构化查询语言)的LATERAL TABLE(侧边表)自定义TableFunction(表函数)的方式更改数据在Flink框架中的写入逻辑,从而实现Flink框架能够将数据按照顺序写入多个待写入节点。

其中,在S201中目标节点为待写入节点中除终端节点以外的任一节点,终端节点为多个待写入节点中按照预设顺序位于末位的待写入节点。示例性的,以前述应用场景为例,假设需要依次将数据写入ES、Hbase以及Kafka中,则目标节点可以为ES和Hbase中的任一节点,Kafka为终端节点。可以理解的是,多个待写入节点中包括一个终端节点,并且至少包括一个终端节点以外的其他节点。

根据应用场景中的不同,多个待写入节点可以是指不同的节点,例如在一些可能应用场景中,待写入节点可以包括ES、Hbase以及Kafka,在另一种可能的应用场景中,待写入节点可以包括ES、MongoDB(一种基于分布式文件存储的)以及Kafka。在其他可能的应用场景中也可以包括除ES、Hbase、MongoDB以及Kafka以外的其他待写入节点,并且待写入节点的数目也可以是除3以外的其他数目。本实施例对此不作任何限制。

在S202中,由于数据是缓存在Flink State(Flink状态)中,因此Flink框架可以获取各批数据的状态,从而准确确定出已经flush至目标节点的数据,从而在数据成功flush至目标节点后,再将数据作为下游节点的待写入数据缓存至下游节点对应的Flink State中。从而实现数据的顺序写入。其中,下游节点为多个待写入节点中按照预设顺序位于目标节点下一位的待写入节点,示例性的,以前述应用场景为例,Hbase为ES的下游节点,Kafka为Hbase的下游节点。

Flink框架管理各批数据的状态的方式根据应用场景的不同可以不同,示例性的,在一种可能的实施例中,可以按照缓存的先后顺序为每批数据设置对应的flush(批)标识(id),例如第一批缓存至Flink State中的数据对应的flush标识为1,第二批缓存至FlinkState中的数据对应的flush标识为2,依次类推。

并且可以维护一个数据标识,该数据标识用于表示已经成功刷新至目标节点的批数据。示例性的,该数据标识初始时可以为1,每当一批数据成功刷新至目标节点,则该数据标识自加1,例如,当第一批数据成功刷新至目标节点时该数据标识变为2,当第一批数据成功刷新至目标节点时该数据标识变为3,依次类推。则所有flush标识不小于该数据标识的数据为尚未成功刷新至目标节点的数据,这些数据还不能缓存至下游节点的Flink State中。所有flush标识不小于该数据标识的数据为尚未成功刷新至目标节点的数据,这些数据还不能缓存至下游节点的Flink State中。

在一种可能的实施例中,可以是将该批数据按照预设的用户自定义规则,进行project(对象)投影,并调用批量写入函数,如mutator.mutate(修改器修改)函数,将经过投影的数据写入所述目标节点的客户端(client)的缓存(buffer)中。再调用客户端的flush函数将该批数据刷新至目标节点。选用该实施例可以使得Flink框架的可定制化更强,更容易满足用户的实际需求。

执行S202的时机根据应用场景的不同可以不同,示例性的,在一种可能的实施例中也可以是每间隔预设间隔时长,执行一次S202,在另一种可能的实施例中也可以是实时的将数据缓存至Flink State中。

在另一种可能的实施例中也可以是判断是否达到预设条件,如果达到预设条件,则执行S202。其中预设条件可以包括以下条件中的一种或多种条件:

条件1:目标节点对应的Flink State中缓存的数据批数大于预设批数阈值。

条件2:目标节点对应的Flink State中缓存的数据的数据量大于预设数据量阈值。

条件3:距离上次将批数据通过flush函数刷新到目标节点的时长大于预设间隔阈值。

当预设条件中包括以上三种条件中的多种条件时,这些条件的组合方式可以根据应用场景的不同而不同,示例性的,预设条件可以是条件1和条件2,也可以是条件1或条件2。

在S203中,对于作为目标节点的下游节点的待写入数据缓存至下游节点对应的Flink State中的数据,并且如果下游节点不为终端节点,则下游节点对待写入数据的写入逻辑可以与目标节点相同,即可以按照将待写入数据写入目标节点的方式将待写入数据写入下游节点,由于原理是相同的,因此在此不再赘述。

如果下游节点为终端节点,则下游节点对待写入数据的写入逻辑与目标节点相似,区别仅在于由于终端节点不存在下游节点,因此终端节点不会将Flink State中的数据缓存至下游节点对应的Flink State中。

判断数据是否成功刷新至目标节点的方式根据应用场景的不同可以不同,示例性的,以前述S202中的应用场景为例,假设Flink框架中维护有用于表示已经成功刷新至目标节点的批数据的数据标识,则可以是将数据标识所表示的每批数据通过collector上下文发送至目标节点的下游节点对应的Flink State中。例如,如前述分析,可以是将所有flush标识小于数据标识的数据通过collector上下文发送至目标节点的下游节点对应的FlinkState中。

在一种可能的实施例中,每当该批数据刷新到目标节点失败时,可以确定该批数据刷新到目标节点的次数,如果该次数不大于预设次数阈值,则重新将该批数据刷新至目标节点,如果次数大于预设次数阈值,则持久化用于表示Flink框架状态的快照。

处于节省目标节点对应的Flink State的空间,每当一批数据作为目标节点的下游节点的待写入数据,通过collector上下文缓存至下游节点对应的Flink State中之后,可以在经过预设清理时长之后,在目标节点对应的Flink State中删除该一批数据。

示例性的,可以是每当一批数据作为目标节点的下游节点的待写入数据,通过collector上下文缓存至下游节点对应的Flink State中之后,维护一个计时器,该计时器从预设清理时长开始倒计时,当该计时器归零时,在目标节点对应的Flink State中删除该一批数据。

为了更清楚的对本发明实施例提供的Flink框架的顺序写方法进行说明,下面将以Flink框架需要依次将数据写入ES、Hbase以及Kafka的应用场景为例,结合应用场景对本发明实施例提供的Flink框架的顺序写方法进行说明。

可以参见图3,图3所示为本发明实施例提供的Flink框架的一种可能的原理示意图,在该实施例中,可以通过SQL的Lateral Table语法扩展各待写入节点的表函数。每个待写入节点对应的表函数中包括可以包括以下四类功能函数:writeFlinkState(Flink状态写入)、invoke(调研)、snapshot(快照)以及collect2DownTask(collect至下游节点的数据发送函数)。

并且在该实施例中,可以对Kafka源(Kafka source)输出的数据进行数据清洗,示例性的,可以是通过ETL Map(一种数据清洗工具)对数据进行清洗。

其中,writeFlinkState用于将待写入目标节点的数据分批次缓存至所述目标节点对应的Flink State中,所述目标节点为所述多个待写入节点中除终端节点以外的任一节点。invoke用于依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点。collect2DownTask用于在成功将该批数据刷新到所述目标节点后,将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中。snapshot用于执行snapshot操作以获取Flink框架的快照并持久化,以便于在Flink框架出现故障时相关人员可以根据持久化的快照对故障进行分析、修复。

writeFlinkState的原理示意图可以参见图4,关于writeFlinkState的逻辑可以参见前述关于S201的相关说明在此不再赘述。invoke的原理示意图可以参见图5,关于invoke的逻辑可以参见前述关于S202的相关说明在此不再赘述。collect2DownTask的原理示意图可以参见图6,关于collect2DownTask的逻辑可以参见前述关于S203的相关说明在此不再赘述

snapshot的原理示意图可以参见图7,snapshot为Flink单独调度的逻辑,原生函数统一实现为client flush数据到远端,然后,系统自动对flink state进行持久化,也就是说,我们自定义的SinkTableFunction(节点表格功能函数)中,使用的state也会被自动保存和持久化。

参见图8,图8所示为本发明实施例提供的Flink框架的顺序写装置的一种结构示意图,应用于Flink框架,所述Flink框架包括多个待写入节点,所述方法包括:

缓存写入模块801,用于将待写入目标节点的数据分批次缓存至所述目标节点对应的Flink State中,所述目标节点为所述多个待写入节点中除终端节点以外的任一节点,所述终端节点为所述多个待写入节点中按照预设顺序位于末位的待写入节点;

数据刷新模块802,用于依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点;

下游发送模块803,用于在成功将该批数据刷新到所述目标节点后,将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中,所述下游节点为所述多个待写入节点中按照预设顺序位于所述目标节点下一位的待写入节点。

在一种可能的实施例中,在所述数据刷新模块802在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,还用于每当成功将该批数据刷新到所述目标节点时,更新数据标识,所述数据标识用于表示已经成功刷新至所述目标节点的批数据;

所述下游发送模块803在成功将该批数据刷新到所述目标节点后,将该批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中,包括:

将所述数据标识所表示的每批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中。

在一种可能的实施例中,在所述下游发送模块803在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,还用于每当该批数据刷新到所述目标节点失败时,确定已经将该批数据刷新到所述目标节点的次数;如果所述次数不大于预设次数阈值,重新将该批数据刷新到所述目标节点;如果所述次数大于所述预设次数阈值,持久化用于表示所述Flink框架状态的快照。

在一种可能的实施例中,所述数据刷新模块802依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点,包括:

判断是否达到预设条件,所述预设条件包括以下条件中的一种或多种条件:所述目标节点对应的Flink State中缓存的数据批数大于预设批数阈值,所述目标节点对应的Flink State中缓存的数据的数据量大于预设数据量阈值,距离上次将批数据通过flush函数刷新到所述目标节点的时长大于预设间隔阈值;

如果达到所述预设条件,依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点。

在一种可能的实施例中,所述下游发送模块803在所述将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的FlinkState中之后,还用于在经过预设清理时长后,在所述目标节点对应的Flink State中删除该批数据。

在一种可能的实施例中,所述数据刷新模块802将该批数据通过flush函数刷新到所述目标节点,包括:

将该批数据按照预设的用户自定义规则,进行project投影;

调用批量写入函数将经过投影的数据写入所述目标节点的客户端的缓存中;

调用所述客户端的flush函数将该批数据刷新到所述目标节点。

本发明实施例还提供了一种电子设备,如图9所示,包括:

存储器901,用于存放计算机程序;

处理器902,用于执行存储器901上所存放的程序时,实现如下步骤:

将待写入目标节点的数据分批次缓存至所述目标节点对应的Flink State中,所述目标节点为所述多个待写入节点中除终端节点以外的任一节点,所述终端节点为所述多个待写入节点中按照预设顺序位于末位的待写入节点;

依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点;

在成功将该批数据刷新到所述目标节点后,将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中,所述下游节点为所述多个待写入节点中按照预设顺序位于所述目标节点下一位的待写入节点。

在一种可能的实施例中,在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,所述方法还包括:

每当成功将该批数据刷新到所述目标节点时,更新数据标识,所述数据标识用于表示已经成功刷新至所述目标节点的批数据;

所述在成功将该批数据刷新到所述目标节点后,将该批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中,包括:

将所述数据标识所表示的每批数据通过collector上下文发送至所述目标节点的下游节点对应的Flink State中。

在一种可能的实施例中,在所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点之后,所述方法还包括:

每当该批数据刷新到所述目标节点失败时,确定已经将该批数据刷新到所述目标节点的次数;

如果所述次数不大于预设次数阈值,重新将该批数据刷新到所述目标节点;

如果所述次数大于所述预设次数阈值,持久化用于表示所述Flink框架状态的快照。

在一种可能的实施例中,所述依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点,包括:

判断是否达到预设条件,所述预设条件包括以下条件中的一种或多种条件:所述目标节点对应的Flink State中缓存的数据批数大于预设批数阈值,所述目标节点对应的Flink State中缓存的数据的数据量大于预设数据量阈值,距离上次将批数据通过flush函数刷新到所述目标节点的时长大于预设间隔阈值;

如果达到所述预设条件,依次针对所述目标节点对应的Flink State中缓存的每批数据,将该批数据通过flush函数刷新到所述目标节点。

在一种可能的实施例中,在所述将该批数据作为所述目标节点的下游节点的待写入数据,通过collector上下文缓存至所述下游节点对应的Flink State中之后,所述方法还包括:

在经过预设清理时长后,在所述目标节点对应的Flink State中删除该批数据。

在一种可能的实施例中,所述将该批数据通过flush函数刷新到所述目标节点,包括:

将该批数据按照预设的用户自定义规则,进行project投影;

调用批量写入函数将经过投影的数据写入所述目标节点的客户端的缓存中;

调用所述客户端的flush函数将该批数据刷新到所述目标节点。

上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一Flink框架的顺序写方法的步骤。

在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一Flink框架的顺序写方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

相关技术
  • 一种Flink框架的顺序写方法、装置及电子设备
  • 一种基于Flink框架的数据管理方法及装置
技术分类

06120112923246