Flink如何处理乱序数据?

1

Flink作为一款大数据流式处理框架,Flink 是基于其 WaterMark (水印)来处理乱序数据的。WaterMark 是一种特殊的消息记录,本身有一个时间截属性,WaterMark 表示所有事件时间小于该水印的时间的记录都已经到达 Flink 系统,随后开始触发计算。

Flink 使用 WaterMark 处理乱序事件,使得一些基于时间的计算不会一直等待记录

Flink 中数据乱序是指消息事件虽然按照时间顺序产生,但真正进入 Flink 系统处理时,没有按照产生的时间顺序来到。这其中有很多原因,比如网络 IO 传播,机器故障等等。

Flink 中有三种时间类型,数据摄入到 Flink 的时间、数据处理的时间、数据的产生事件时间。乱序则是使用的数据的事件时间,在使用事件时间时,一般消息记录中要有时间字段属性,表示数据记录真实产生的时间。

2

flink这一块主要参照了谷歌发表的论文《the datflow model》,通过窗口+触发器+增量处理模型,实现了对大规模、无边界、乱序数据集的实时处理。

即先通过流式处理管道实时计算出一个接近精确的结果(以水印描述事件处理进度),再通过增量处理模型不断地动态修正,最终提供一个完全准确的结果。

详情可以关注我,然后查看《分布式数据处理系列》理论篇第一章。

3

仔细看Flink中watermark,它能解决数据乱序的问题,想简单易懂的理解这个原理机制,可以参考spark中结构化流对watermark的描述,这一点要比flink中描述的更清楚,更形象化!

4

当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager, JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。 TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。

Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程 (Streaming的任务),也可以不结束并等待结果返回。

JobManager 主要负责调度 Job 并协调 Task 做 checkpoint(分布式快照)。从 Client 处接收到 Job 和 JAR 包 等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章