Flink使用WaterMark处理乱序事件,使得一些基于时间的计算不会一直等待记录
Flink中数据乱序是指消息事件虽然按照时间顺序产生,但真正进入Flink系统处理时,没有按照产生的时间顺序来到。这其中有很多原因,比如网络IO传播,机器故障等等。
Flink中有三种时间类型,数据摄入到Flink的时间、数据处理的时间、数据的产生事件时间。乱序则是使用的数据的事件时间,在使用事件时间时,一般消息记录中要有时间字段属性,表示数据记录真实产生的时间。
Flink中一般窗口操作使用事件时间比较多。每一个窗口其实都有一个开始的时间和结束的时间,当Flink窗口算子的WaterMark的时间截大于窗口结束的时间时,这个窗口开始出发。FlinkWaterMark一般会比真实的事件时间延迟个1、2秒,所以当WaterMark的时间截为T时,之后所有小于T时间的记录,都会被丢弃掉,不进入窗口计算。
Flink也可以使用状态来保存数据,通过Timer来进行触发计算
当消息记录进入Flink系统时,可以先不对其进行处理,把记录保存在Flink状态中。使用ProcessFuntion函数,在其中可以注册Timer,比如5秒后开始计算,然后从状态中读取原来的记录,根据业务逻辑来编写具体的函数逻辑。
个人想法
Flink计算引擎目前在大数据领域非常火热,很多公司都使用Flink作为公司的实时流计算引擎,比如阿里巴巴、头条、腾讯等,尤其是阿里巴巴,国内Flink社区运营也主要是阿里巴巴在主导运营,你在学习大数据时,可以将Flink作为自己学习的第一框架。
偶是Lake,专注大数据技术原理、人工智能、数据库技术、程序员经验分享,如果偶的问答对你有帮助的话,希望你能点赞关注偶,感谢。
偶会持续大数据、数据库方面的内容,如果你有任何问题,也私信偶,偶会认真解答每一个问题。期待您的关注