CN113742004A - 一种基于flink框架的数据处理方法和装置 - Google Patents
一种基于flink框架的数据处理方法和装置 Download PDFInfo
- Publication number
- CN113742004A CN113742004A CN202010871127.6A CN202010871127A CN113742004A CN 113742004 A CN113742004 A CN 113742004A CN 202010871127 A CN202010871127 A CN 202010871127A CN 113742004 A CN113742004 A CN 113742004A
- Authority
- CN
- China
- Prior art keywords
- processing
- data
- result
- operator
- trigger
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 16
- 238000012545 processing Methods 0.000 claims abstract description 170
- 238000000034 method Methods 0.000 claims abstract description 145
- 230000008569 process Effects 0.000 claims abstract description 51
- 230000001960 triggered effect Effects 0.000 claims description 22
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 description 31
- 230000006870 function Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 4
- 238000010926 purge Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于flink框架的数据处理方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。该实施方式分离处理数据和发送汇总结果操作并分别触发,避免在大数据场景下,出现短时间内窗口积压大量数据对算子的存储状态造成压力的情况,保证了业务系统的平稳运行。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于flink框架的数据处理方法和装置。
背景技术
在进行实时数据统计的应用中,有着这样的统计场景,要求实时汇总1小时内的数据,并且每隔1分钟输出一次汇总结果用于展示。
现有基于flink框架技术可以通过窗口触发器(Trigger)定时触发窗口计算,如在1小时的时间窗口内,每隔1分钟触发1次窗口计算,同时输出计算结果。
在实现本发明的过程中,发明人发现现有技术至少存在如下问题:现有数据处理和发送是绑定进行的,在大数据场景下若出现流量高峰,1分钟内窗口会积压大量数据,导致对算子(flink框架中有很多算子,每个算子代表一类运算)的存储状态造成很大压力,影响业务系统的平稳运行。
发明内容
有鉴于此,本发明实施例提供一种基于flink框架的数据处理方法和装置,至少能够解决现有数据处理方式不适合大数据场景的现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种基于flink框架的数据处理方法,包括:
flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
可选的,在从窗口算子中调用业务处理逻辑处理所述数据之前,还包括:
利用flink框架确定所述数据所处维度,以将所述数据划分至与所述维度对应的窗口内,并将所述窗口的键名作为所述数据的键名;
从触发器中获取触发处理时间的时间戳,结合所述键名、上下文对象和收集器信息一同存储至所述窗口的所述窗口算子中;
所述从窗口算子中调用业务处理逻辑处理所述数据,包括:
从所述窗口算子中获取所述键名、所述触发处理时间的时间戳、所述上下文对象和所述收集器信息,并调用所述定时器触发时的处理方法进行处理。
可选的,所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子,包括:
将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间方法;
在调用所述处理时间方法的过程中,调用触发器中与所述处理时间方法对应的处理时间方法,得到触发发送汇总结果操作的触发状态;
若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
可选的,在所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子之前,还包括:判断历史数据是否为空,若为空,则确定所述数据为窗口接收的第一条数据,触发触发器在上下文对象中注册一个定时器;以及
在所述从上下文对象中获取所述汇总结果并传输至下游算子之后,还包括:触发触发器在上下文对象中重新注册一个定时器。
可选的,所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子,包括:
组合所述窗口的维度和所述数据的维度生成标识,基于所述标识对所述汇总结果进行打标处理;
将打标后的汇总结果传输至处理算子中,以在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,并在到达定时器的时间后,将所述汇总结果传输至所述下游算子。
可选的,所述在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,还包括:
判断是否存在历史汇总结果,若不存在,则确定所述汇总结果为所述处理算子接收到的第一个汇总结果,在所述处理算子的上下文对象中注册一个定时器;以及
在所述将所述汇总结果传输至所述下游算子之后,还包括:在所述处理算子的上下文对象中重新注册一个定时器。
为实现上述目的,根据本发明实施例的另一方面,提供了一种基于flink框架的数据处理装置,包括:
接收模块,用于flink框架中的窗口在接收到数据后,调用触发器中处理数据的装置,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
处理模块,用于若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
传输模块,用于在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
可选的,所述处理模块,还用于:
利用flink框架确定所述数据所处维度,以将所述数据划分至与所述维度对应的窗口内,并将所述窗口的键名作为所述数据的键名;
从触发器中获取触发处理时间的时间戳,结合所述键名、上下文对象和收集器信息一同存储至所述窗口的所述窗口算子中;
从所述窗口算子中获取所述键名、所述触发处理时间的时间戳、所述上下文对象和所述收集器信息,并调用所述定时器触发时的处理装置进行处理。
可选的,所述传输模块,用于:
将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间装置;
在调用所述处理时间装置的过程中,调用触发器中与所述处理时间装置对应的处理时间装置,得到触发发送汇总结果操作的触发状态;
若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
可选的,还包括第一注册模块,用于:
判断历史数据是否为空,若为空,则确定所述数据为窗口接收的第一条数据,触发触发器在上下文对象中注册一个定时器;以及
在从上下文对象中获取所述汇总结果并传输至下游算子之后,触发触发器在上下文对象中重新注册一个定时器。
可选的,所述传输模块,用于:
组合所述窗口的维度和所述数据的维度生成标识,基于所述标识对所述汇总结果进行打标处理;
将打标后的汇总结果传输至处理算子中,以在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,并在到达定时器的时间后,将所述汇总结果传输至所述下游算子。
可选的,还包括第二注册模块,用于:
判断是否存在历史汇总结果,若不存在,则确定所述汇总结果为所述处理算子接收到的第一个汇总结果,在所述处理算子的上下文对象中注册一个定时器;以及
在所述将所述汇总结果传输至所述下游算子之后,还包括:在所述处理算子的上下文对象中重新注册一个定时器。
为实现上述目的,根据本发明实施例的再一方面,提供了一种基于flink框架的数据处理电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的基于flink框架的数据处理方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的基于flink框架的数据处理方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:在现有flink技术框架的基础上,通过修改和扩展现有的窗口技术,包括扩展触发器、扩展窗口处理函数、修改和扩展窗口算子处理逻辑等方法,以分别触发窗口的数据计算功能和数据结果发送功能,降低对算子存储状态的压力,保证业务系统的稳定运行。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种基于flink框架的数据处理方法的主要流程示意图;
图2是根据本发明实施例的一种可选的基于flink框架的数据处理方法的流程示意图;
图3是根据本发明实施例的另一种可选的基于flink框架的数据处理方法的流程示意图;
图4是根据本发明实施例的又一种可选的基于flink框架的数据处理方法的流程示意图;
图5是根据本发明实施例的又一种可选的基于flink框架的数据处理方法的流程示意图;
图6是根据本发明实施例的一种基于flink框架的数据处理装置的主要模块示意图;
图7是本发明实施例可以应用于其中的示例性系统架构图;
图8是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要说明的是,flink是一种流式处理框架,本方案整体的设计和实现都是基于flink框架进行的,可能思想上会适用于其他的流式计算框架,但实际实现上仅仅适用于flink框架,所以整体而言,本方案仅仅适用于flink框架。
对于本方案涉及的词语,做解释如下:
窗口:流式计算中的一种数据计算方式,按照固定时间或者长度将数据流切分为不同的数据片段,之后在各数据片段上进行相应的运算,得到一定时间范围内的统计结果。
触发器(Trigger):一种触发机制,通过配置触发窗口的不同操作,实现窗口的计算。
Checkpoint机制:保存整个业务系统的状态,在系统故障后可以恢复系统状态。
ProcessWindowFunction:用户实现的在窗口上执行的数据计算的函数接口。
WindowOperator:窗口算子,flink框架内使用的用于窗口计算的算子。
处理时间(ProcessingTime):flink框架定义的时间,表示系统处理数据时的机器时间。
KeyedProcessFunction:flink框架定义的一种keyed函数,可以处理流上的keyed数据。
参见图1,示出的是本发明实施例提供的一种基于flink框架的数据处理方法的主要流程图,包括如下步骤:
S101:flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
S102:若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
S103:在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
上述实施方式中,对于步骤S101,预先将触发器TriggerResult枚举类由原来的2元组(计算且发送,清除)扩展为多元组,本方案以3元组(计算,发送,清除)为例进行说明,实际可以大于3元组。
3元组中包括3个分量的触发状态,每个分量对应于一类窗口算子的操作,分别为:
1)第一个分量表示是否触发计算操作;
2)第二个分量表示是否触发发送结果数据操作;
3)第三个分量依然表示是否触发清除窗口数据操作,其实施方式与现有相同,在此不再赘述。
为每个分量配置不同的取值来表示相应操作的触发状态,分别为true和false,true表示触发当前分量表示的操作,false表示不触发。
TriggerResult枚举类在扩展之后,虽然有了更多的取值组合,但是并不是所有的取值组合都有合理的使用场景,此处针对本方案中部分重要的取值组合含义说明如下:
1)CONTINUE(false,false,false)表示在窗口上没有任何操作;
2)FIRE_AND_PURGE(true,true,true)表示触发计算和发送结果数据的操作,同时触发清除窗口数据的操作;
3)FIRE(true,true,false)表示同时触发计算和发送结果数据的操作,但是不触发清除窗口数据的操作;
4)EVALUATE_AND_PURGE(true,false,true)表示触发计算操作,不触发发送结果数据的操作,触发清除窗口数据的操作;
5)EMIT(false,true,false)表示不触发计算操作,触发发送结果数据的操作,不触发清除窗口数据的操作;
6)PURGE(false,false,true)表示仅仅触发清除窗口数据的操作,但是不触发计算操作,也不触发发送结果数据的操作。
flink框架中的窗口在每进入一条数据时,调用一次触发器Trigger类的onElement()方法(即处理数据的方法),onElement()方法可以返触发结果,如TriggerResult.EVALUATE_AND_PURGE、TriggerResult.FIRE_AND_PURGE,表示可以触发计算操作和触发清除窗口数据的操作。
需要说明的是,触发器每次返回的触发结果均包括三个分量的触发状态,在处理数据阶段主要使用的是“触发计算操作”分量,此时可以不考虑第二个分量“触发发送结果数据操作”的触发状态。且在“触发计算操作”的触发状态为false时,不对数据做处理。
对于步骤S102,窗口计算需根据触发器的触发结果来决定下一步执行哪类操作。窗口算子中包含处理数据的业务处理逻辑,由于flink框架不知道用户需做何种数据处理,因此业务处理逻辑定义是开放式的,以便用户自定义设置。
扩展flink框架内定义的函数类,该函数类的格式固定且专用于处理窗口数据,不可以随意定义。在ProcessWindowFunction类中增加publicvoid onTimer(K key,longtimestamp,Context ctx,Collector<O>out)throw Exception{}方法,即定时器触发时的处理方法。
方法中各个参数的含义如下:
1)key表示该窗口计算中数据的键名。flink框架预先按照一定维度划分数据,并将相同维度的数据划分到同一窗口进行处理,如男性、女性。后续将该窗口的key值作为该数据的key值,同一窗口内数据的key值相同。
2)timestamp表示触发处理时间的时间戳。在flink中有3种时间,一种是数据进入业务系统的时间,一种是业务系统处理数据的时间,一种是事件时间,这里使用的是处理时间。若使用事件时间,需使用相应的onEventTime方法。
3)ctx表示窗口的上下文对象,用以存储汇总结果数据。如一个计算过程分为3步,第一步计算的结果可以存入上下文对象中,然后在第三步从上下文对象中直接取出来使用,无需重新计算。
4)out表示发送数据的收集器,以向下游算子发送汇总结果数据。
需要说明的是,无论做何种处理,都需实现ProcessWindowFunction类。在flink框架中,该类给用户提供一个process方法以供用户编写各自的业务处理逻辑,且需要初始化后才可以使用,如.process(new OrderInfoDataProcessWindowFunction())。
使用时,需要用户实现ProcessWindowFunction类的抽象方法,包括实现新增的onTimer()方法。flink框架中的WindowOperator算子能够回调该方法,执行用户在该方法中自定义的业务处理逻辑,在onTimer()方法中从ctx获取存储在窗口上下文对象中的汇总结果,并调用Collector对象的collect()方法将汇总结果发送出去。
另外,窗口之间相互独立,且仅计算落入自身窗口内的数据,因而窗口计算并非是一个一个进行的。至于数据是否存有重复,需查看是否有重复数据落入不同窗口。以时间划分窗口为例,对于滚动窗口在时间上不会重复,如7点-8点、8点-9点,但对于滑动窗口在时间上则会有重复,如7点-8点、7点半-8点半,此时数据也会有重复。
对于步骤S103,本方案分离原有的“计算且发送”操作,使窗口的数据计算功能和数据结果发送功能可以分别触发,形成两个独立的进程,从而可以及时地对落入窗口的数据进行计算。
在达到定时器的时间后,可以通过调用onProcessingTime()方法(参见图2所示)、或将汇总结果传输至process算子进行缓存(参见图4所示),但最终目的均会将汇总结果传输至下游算子。
另外,窗口算子汇总结果是每接收一个数据处理一个并汇总。在将汇总结果传输至下游算子后,会清理掉当前时间段处理(前一个定时器结束~本次定时器结束)的所有数据,以此得到每个定时器时间段内的汇总结果,如每隔1分钟的1次汇总结果。
上述实施例所提供的方法,分离处理数据和发送汇总结果操作并分别触发,避免在大数据场景下,出现短时间内窗口积压大量数据对算子的存储状态造成压力的情况,保证了业务系统的平稳运行。
参见图2,示出了根据本发明实施例的一种可选的基于flink框架的数据处理方法流程示意图,包括如下步骤:
S201:flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
S202:若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
S203:将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间方法;
S204:在调用所述处理时间方法的过程中,调用触发器中与所述处理时间方法对应的处理时间方法,得到触发发送汇总结果操作的触发状态;
S205:若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
上述实施方式中,对于步骤S201和S202可参见图1所示步骤S101和S102的描述,在此不再赘述。
上述实施方式中,对于步骤S203~S205,flink框架中针对每个窗口设置有上下文对象,用以存储有状态的结果数据,如汇总结果,而不同窗口的上下文对象不同。
每个WindowOperator中设有一个触发器,用以控制窗口计算的触发。在触发器中注册定时器,是通过触发器上下文对象来注册的,上下文对象内部在窗口内部的定时器服务InternalTimerService上设置一个具体的时间点(如1分钟),得到一个处理时间(ProcessingTime)定时器。
在flink程序的执行过程中,当“框架内部定时器服务”上注册的定时器到达了设定的时间点时,会触发flink框架执行WindowOperator内部响应该时间的定时器服务,回调在其上注册的onProcessingTime()方法,即响应方法或称为处理时间方法。
在执行WindowOperator算子的onProcessingTime()方法时,会执行相应的Trigger类的onProcessingTime()方法,得到触发结果,判断触发结果TriggerResult是否满足发送结果数据的条件,即第二个分量的值是否为true。
如果第二个分量为true,则表示需触发发送汇总结果的操作,实际上是执行WindowOperator算子类实例中设置的userFunction(即Process WindowFunction类实例)的onTimer()方法,在onTimer()方法中执行用户配置的获取计算结果数据和发送结果数据的操作。
需要说明的是,窗口算子中的onProcessingTime()方法,与触发器类中的onProcessingTime()方法是一对一的,两个方法的定义、签名和所属类均不相同,但功能相同。由于窗口计算执行什么样的操作是由触发器控制的,因此在窗口算子回调onProcessingTime()方法时,也会执行触发器中与之对应的onProcessingTime()方法,该方法的返回值决定了窗口算子需执行什么样的操作。
上述实施例所提供的方法,单独设置一个用以实现将汇总结果发送给下游算子的方法,当用户设定的定时器到达时,flink框架会执行onProcessingTime()方法,从而实现定时把汇总结果发送给下游算子。
参见图3,示出了根据本发明实施例的另一种可选的基于flink框架的数据处理方法流程示意图,包括如下步骤:
S301:flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
S302:若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果,将所述汇总结果存储至上下文对象中;
S303:判断历史数据是否为空,若为空,则确定所述数据为窗口接收的第一条数据,触发触发器在上下文对象中注册一个定时器;
S304:当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间方法;
S305:在调用所述处理时间方法的过程中,调用触发器中与所述处理时间方法对应的处理时间方法,得到触发发送汇总结果操作的触发状态;
S306:若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,并触发触发器在上下文对象中重新注册一个定时器;
S307:若触发状态为假,则不处理,
上述实施例方式中,对于步骤S301和S302可参见图1所示步骤S101和S102的描述,步骤S304~S305和S307可参见图2所示步骤S203~S205的描述,在此不再赘述。
对于步骤S303,通过判断是否已接收过历史数据,来确定当前处理的数据是否为该窗口接收的第一条数据。若是,则触发触发器在上下文对象TriggerContext中注册一个处理时间(ProcessingTime)的定时器,通过调用TriggerContext.registerProcessingTimeTimer()方法实现。之前提到flink框架中有3种时间,此处设置定时器使用的是处理时间。
另外,对于窗口接收到的第一数据,可以添加标记first,若存有标记first的历史数据,则表示此时处理的数据并非窗口接收到的第一条数据,无需设置定时器。后续定时器的设置是在定时器触发时,flink框架执行的onProcessingTimer方法中设置。
对于步骤S307,在原定时器时间到达后,其配置的时间点失效,需重新调用TriggerContext.registerProcessingTimeTimer()方法,触发触发器在上下文对象中重新注册一个新的处理时间(ProcessingTime)定时器。同时该方法需要返回结果TriggerResult.EMIT,表示定时器触发时需要将汇总结果发送出去。
上述实施例所提供的方法,在窗口收到第一个数据时注册定时器,或者在定时器时间到达并传输汇总结果之后,重新注册一个定时器,从而可以实现每隔一定时间都会重新注册下一次触发的时间,达到定时触发的效果。
参见图4,示出了根据本发明实施例的又一种可选的基于flink框架的数据处理方法流程示意图,包括如下步骤:
S401:flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
S402:若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
S403:组合所述窗口的维度和所述数据的维度生成标识,基于所述标识对所述汇总结果进行打标处理;
S404:将打标后的汇总结果传输至处理算子中,以在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,并在到达定时器的时间后,将所述汇总结果传输至所述下游算子。
上述实施方式中,对于步骤S401和S402可参见图1所示步骤S101和S102的描述,在此不再赘述。
上述实施方式中,对于步骤S403~S404,在不扩展TriggerResult和ProcessWindowFunction的情况下,也可以实现在大数据量场景中定时发送结果数据的目的,只是该方案需要增加额外的算子来辅助实现。
在WindowOperator算子和下游算子之间增加一个process算子,例如KeyedProcessFunction,用以缓存上游WindowOperator算子实时发送的汇总结果。
由于窗口数量较多,为便于后续来自同一窗口的数据相互覆盖,可以依据窗口的维度和数据的维度建立标识,对汇总结果进行打标。对于同一窗口,后来的汇总结果即为最新的,process算子中仅保留最新的汇总结果,以减缓缓存的数据量,减轻算子保存状态(checkpoint)的压力。
process算子中也设有触发器,并注册有定时器,注册触发条件同图3同理,具体实施参见图5所示。process算子在收到汇总结果后,判断是否存在历史汇总结果,若不存在,则确定汇总结果为接收到的第一个汇总结果,在处理算子的上下文对象中注册一个定时器。以及在将汇总结果传输至下游算子之后,重新在process算子的上下文对象中注册一个定时器。
上述实施例所提供的方法,增加缓存各窗口汇总结果的process算子,利用process算子的定时器定时将缓存的汇总结果发送到下游算子,同时清除缓存数据,从而在大数据量场景下实现窗口数据的实时计算以及定时发送的目的。
本发明实施例所提供的方法,在现有flink技术框架的基础上:
1)将原来合并在一起的表示触发计算操作和触发发送数据操作的TriggerResult值,拆分成独立地可以触发计算的TriggerResult值和可以触发发送结果数据的TriggerResult值,使触发发送结果数据的操作可以独立地进行,同时独立于窗口计算将汇总结果定时发送至下游算子;
2)修改和扩展现有的窗口技术,包括扩展触发器、扩展窗口处理函数、修改和扩展窗口算子处理逻辑等方法;其中,处理数据是process方法,定时发送结果数据是onTimer方法;
3)在窗口收到第一个数据时注册定时器以及在达到定时器时间后重新注册,保证了定时传输汇总数据的目的,对Process算子同理;
通过上述方式达到在大数据量的场景下,避免出现短时间内窗口积压大量的数据对算子的存储状态造成过大压力的情况,保证业务系统依然可以平稳运行。
参见图6,示出了本发明实施例提供的一种基于flink框架的数据处理装置600的主要模块示意图,包括:
接收模块601,用于flink框架中的窗口在接收到数据后,调用触发器中处理数据的装置,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
处理模块602,用于若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
传输模块603,用于在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
本发明实施装置中,所述处理模块602,还用于:
利用flink框架确定所述数据所处维度,以将所述数据划分至与所述维度对应的窗口内,并将所述窗口的键名作为所述数据的键名;
从触发器中获取触发处理时间的时间戳,结合所述键名、上下文对象和收集器信息一同存储至所述窗口的所述窗口算子中;
从所述窗口算子中获取所述键名、所述触发处理时间的时间戳、所述上下文对象和所述收集器信息,并调用所述定时器触发时的处理装置进行处理。
本发明实施装置中,所述传输模块603,用于:
将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间装置;
在调用所述处理时间装置的过程中,调用触发器中与所述处理时间装置对应的处理时间装置,得到触发发送汇总结果操作的触发状态;
若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
本发明实施装置还包括第一注册模块604(图中未标出),用于:
判断历史数据是否为空,若为空,则确定所述数据为窗口接收的第一条数据,触发触发器在上下文对象中注册一个定时器;以及
在从上下文对象中获取所述汇总结果并传输至下游算子之后,触发触发器在上下文对象中重新注册一个定时器。
本发明实施装置中,所述传输模块603,用于:
组合所述窗口的维度和所述数据的维度生成标识,基于所述标识对所述汇总结果进行打标处理;
将打标后的汇总结果传输至处理算子中,以在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,并在到达定时器的时间后,将所述汇总结果传输至所述下游算子。
本发明实施装置还包括第二注册模块605(图中未标出),用于:
判断是否存在历史汇总结果,若不存在,则确定所述汇总结果为所述处理算子接收到的第一个汇总结果,在所述处理算子的上下文对象中注册一个定时器;以及
在所述将所述汇总结果传输至所述下游算子之后,还包括:在所述处理算子的上下文对象中重新注册一个定时器。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图7示出了可以应用本发明实施例的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705(仅仅是示例)。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,服务器705可以是提供各种服务的服务器。
需要说明的是,本发明实施例所提供的方法一般由服务器705执行,相应地,装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块、处理模块、传输模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,传输模块还可以被描述为“传输汇总结果的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
flink框架中的窗口在接收到数据后,调用触发器中处理数据的装置,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
根据本发明实施例的技术方案,在现有flink技术框架的基础上:
1)将原来合并在一起的表示触发计算操作和触发发送数据操作的TriggerResult值,拆分成独立地可以触发计算的TriggerResult值和可以触发发送结果数据的TriggerResult值,使触发发送结果数据的操作可以独立地进行,同时独立于窗口计算将汇总结果定时发送至下游算子;
2)修改和扩展现有的窗口技术,包括扩展触发器、扩展窗口处理函数、修改和扩展窗口算子处理逻辑等方法;处理数据是process方法,定时发送结果数据是onTimer方法;
3)在窗口收到第一个数据时注册定时器以及在达到定时器时间后重新注册,保证了定时传输汇总数据的目的,对Process算子同理;
通过上述方式达到在大数据量的场景下,避免出现短时间内窗口积压大量的数据对算子的存储状态造成过大压力的情况,保证业务系统依然可以平稳运行。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种基于flink框架的数据处理方法,其特征在于,包括:
flink框架中的窗口在接收到数据后,调用触发器中处理数据的方法,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
2.根据权利要求1所述的方法,其特征在于,在从窗口算子中调用业务处理逻辑处理所述数据之前,还包括:
利用flink框架确定所述数据所处维度,以将所述数据划分至与所述维度对应的窗口内,并将所述窗口的键名作为所述数据的键名;
从触发器中获取触发处理时间的时间戳,结合所述键名、上下文对象和收集器信息一同存储至所述窗口的所述窗口算子中;
所述从窗口算子中调用业务处理逻辑处理所述数据,包括:
从所述窗口算子中获取所述键名、所述触发处理时间的时间戳、所述上下文对象和所述收集器信息,并调用所述定时器触发时的处理方法进行处理。
3.根据权利要求1所述的方法,其特征在于,所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子,包括:
将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间方法;
在调用所述处理时间方法的过程中,调用触发器中与所述处理时间方法对应的处理时间方法,得到触发发送汇总结果操作的触发状态;
若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
4.根据权利要求3所述的方法,其特征在于,在所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子之前,还包括:判断历史数据是否为空,若为空,则确定所述数据为窗口接收的第一条数据,触发触发器在上下文对象中注册一个定时器;以及
在所述从上下文对象中获取所述汇总结果并传输至下游算子之后,还包括:触发触发器在上下文对象中重新注册一个定时器。
5.根据权利要求1所述的方法,其特征在于,所述在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子,包括:
组合所述窗口的维度和所述数据的维度生成标识,基于所述标识对所述汇总结果进行打标处理;
将打标后的汇总结果传输至处理算子中,以在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,并在到达定时器的时间后,将所述汇总结果传输至所述下游算子。
6.根据权利要求5所述的方法,其特征在于,所述在所述处理算子中将与所述标识对应的历史汇总结果更换为所述汇总结果,还包括:
判断是否存在历史汇总结果,若不存在,则确定所述汇总结果为所述处理算子接收到的第一个汇总结果,在所述处理算子的上下文对象中注册一个定时器;以及
在所述将所述汇总结果传输至所述下游算子之后,还包括:在所述处理算子的上下文对象中重新注册一个定时器。
7.一种基于flink框架的数据处理装置,其特征在于,包括:
接收模块,用于flink框架中的窗口在接收到数据后,调用触发器中处理数据的装置,获取当前触发计算操作的触发状态;其中,一个窗口算子中配置一个触发器;
处理模块,用于若所述触发状态为触发,则从窗口算子中调用业务处理逻辑处理所述数据,并将本次处理结果汇总至历史处理结果中,得到汇总结果;
传输模块,用于在到达定时器的时间后,基于预定方式将所述汇总结果传输至下游算子。
8.根据权利要求7所述的装置,其特征在于,所述传输模块,用于:
将所述汇总结果存储至上下文对象中,当到达定时器的时间后,调用窗口算子中与所述时间对应的处理时间方法;
在调用所述处理时间方法的过程中,调用触发器中与所述处理时间方法对应的处理时间方法,得到触发发送汇总结果操作的触发状态;
若触发状态为真,则从上下文对象中获取所述汇总结果并传输至下游算子,若触发状态为假则不处理。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-6中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010871127.6A CN113742004B (zh) | 2020-08-26 | 2020-08-26 | 一种基于flink框架的数据处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010871127.6A CN113742004B (zh) | 2020-08-26 | 2020-08-26 | 一种基于flink框架的数据处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113742004A true CN113742004A (zh) | 2021-12-03 |
CN113742004B CN113742004B (zh) | 2024-04-12 |
Family
ID=78728031
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010871127.6A Active CN113742004B (zh) | 2020-08-26 | 2020-08-26 | 一种基于flink框架的数据处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113742004B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080156A (zh) * | 2022-08-23 | 2022-09-20 | 卓望数码技术(深圳)有限公司 | 基于流批一体的大数据批量计算的优化计算方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017023432A1 (en) * | 2015-08-05 | 2017-02-09 | Google Inc. | Data flow windowing and triggering |
CN109710731A (zh) * | 2018-11-19 | 2019-05-03 | 北京计算机技术及应用研究所 | 一种基于Flink的数据流多向处理系统 |
-
2020
- 2020-08-26 CN CN202010871127.6A patent/CN113742004B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017023432A1 (en) * | 2015-08-05 | 2017-02-09 | Google Inc. | Data flow windowing and triggering |
CN109710731A (zh) * | 2018-11-19 | 2019-05-03 | 北京计算机技术及应用研究所 | 一种基于Flink的数据流多向处理系统 |
Non-Patent Citations (2)
Title |
---|
SAHAL, R等: "Big data multi-query optimisation with Apache Flink", 《INTERNATIONAL JOURNAL OF WEB ENGINEERING AND TECHNOLOGY》, 31 December 2018 (2018-12-31) * |
樊春美;朱建生;单杏花;杨立鹏;李雯;: "基于Flink实时计算的自动化流控制算法", 计算机技术与发展, no. 08, 10 August 2020 (2020-08-10) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080156A (zh) * | 2022-08-23 | 2022-09-20 | 卓望数码技术(深圳)有限公司 | 基于流批一体的大数据批量计算的优化计算方法及装置 |
CN115080156B (zh) * | 2022-08-23 | 2022-11-11 | 卓望数码技术(深圳)有限公司 | 基于流批一体的大数据批量计算的优化计算方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113742004B (zh) | 2024-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108776934B (zh) | 分布式数据计算方法、装置、计算机设备及可读存储介质 | |
CN110532322B (zh) | 运维交互方法、系统、计算机可读存储介质及设备 | |
CN113162848B (zh) | 一种区块链网关的实现方法、装置、网关和介质 | |
US20160036665A1 (en) | Data verification based upgrades in time series system | |
CN109450691B (zh) | 服务网关监控方法、设备及计算机可读存储介质 | |
CN112416632B (zh) | 事件通信方法、装置、电子设备和计算机可读介质 | |
CN112583669A (zh) | 线上链路压力测试方法、装置、电子设备及介质 | |
CN111866101A (zh) | 访问请求处理方法及装置、存储介质和电子设备 | |
CN113742004B (zh) | 一种基于flink框架的数据处理方法和装置 | |
CN114217996A (zh) | 混音方法和装置 | |
US20170034030A1 (en) | Monitoring single content page application transitions | |
CN111290861B (zh) | 消息处理方法、装置及电子设备 | |
CN113760982A (zh) | 一种数据处理方法和装置 | |
US10616081B2 (en) | Application aware cluster monitoring | |
US11743154B2 (en) | Method and apparatus for processing network usage of a cloud product, device, storage medium and product | |
CN108121730B (zh) | 一种将数据更新快速同步到业务系统的装置及方法 | |
US10402234B2 (en) | Fine-grain synchronization in data-parallel jobs | |
CN114816866A (zh) | 故障处理方法、装置、电子设备和存储介质 | |
CN115391158A (zh) | 一种时延确定方法、系统、装置及电子设备 | |
CN112770358B (zh) | 基于业务数据的多速率模式数据发送控制方法及装置 | |
CN111679813B (zh) | 用于信息处理的方法、电子设备和存储介质 | |
CN114157604A (zh) | 一种调节交换网板拥塞的方法、装置及系统 | |
CN111338937A (zh) | 一种对小程序干预下线的方法、装置、设备和介质 | |
CN117319312B (zh) | 一种数据流量控制方法及装置 | |
US20230308527A1 (en) | Method, device, and computer program product for document transmission |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |