Flink入门学习笔记
本文为初入Flink的学习笔记,是在学习过程中对Flink基础知识的整理,具体学习内容包括尚硅谷Flink大数据从入门到精通、Flink官方文档以及[白话解析] Flink的Watermark机制等多个博客。
Flink是什么
Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速的计算
数据流
数据流是指数据像水流一样是连续不断的
有界数据流
有界数据流定义了流的开始,也定义了流的结束;
有界数据流可以在摄取了所有数据后再进行计算
有界数据流所有数据可以被排序,所以不需要有序摄取
有界流处理通常被称为批处理
无界数据流
有状态的计算
为什么需要使用Flink
Flink组成
JobManager
TaskManager
ResourceManager
Dispatcher
Flink的任务提交流程
当一个任务被提交时,Dispatcher就会启动,并将应用交给一个JobManager进行处理
JobManager接收到任务后,会向ResourceManager申请执行任务所需要的插槽(slot)资源
当ResourceManager接收到JobManager申请插槽资源后,会启动TaskManager
TaskManager会向ResourceManager注册自己空闲的slot,ResourceManager会根据JobManager所请求的slot数量,向TaskManager发送提供slot的指令
TaskManager与JobManager直接进行通信,向JobManager提供slot
JobManager向TaskManager分配要在slot中执行的任务
时间语义
window类型
时间窗口
滚动时间窗口
滑动时间窗口
会话窗口
计数窗口
无界数据流定义了流的开始,但没有定义流的结束
无界数据流会无休止地产生数据
无界数据流得到数据必须持续处理,即数据被摄取后需要立即处理,不能等到所有数据都到达再处理,因为无界数据流的输入是无限的,在任何时候都不会结束
处理无界数据流通常需要以特定的顺序摄取时间,例如事件的发生顺序,以便能过够推断结果的完整性
有状态计算是指在程序计算过程中,在Flink内部会存储计算所产生的中间结果,并提供给后续计算使用
因为在日常生活中的数据主要是流数据,例如用于交通运输业和环境等方面进行实时数据采集的传感器、银行中所进行的实时结算和实时异常检测行为。这些应用都需要对大量的实时数据进行及时的处理,希望具有低延时、高吞吐性。传统对于该数据的处理一般是批处理,即将一批数据收集完成后再进行处理,这样将会导致不能实时处理数据,会造成较高的延时,影响实际的使用。而Flink则是进行流处理,即每到来一个数据就进行处理,无需积攒一 批进行处理,因此它具有较高的实时性和高吞吐性,能够更好的满足日常的需求。
Flink主要是由JobManager、TaskManager、ResourceManager和Dispatcher组成
JobManager是控制一个应用程序执行的主进程,也就是说每个应用程序都会被一个不同的JobManager所控制执行
TaskManager是Flink中的工作进程。在Flink中会有多个TaskManager运行,每个TaskManager都会有一定数量的插槽(Slot)
ResourceManager主要负责管理TaskManager的插槽slot
Dispatcher可以跨作业运行,为应用提供了REST接口,而且也提供了WebUI,用来方便展示和监控作业的执行信息
TaskManager和slot的关系
Flink中每一个TaskManager都是一个JVM进程,它可能会在独立的线程上执行一个或多个子任务。为了控制一个TaskManager能接收多个任 务,TaskManager通过slot来进行控制。Slot时TaskManager的最小资源分配单位,一个TaskManager中有多少个slot就意味着能支持多少的并发处理
Event Time:事件创建的时间,即事件在现实世界中发生的时间,通常由事件中的时间戳描述
Ingestion Time:数据进入Flink的时间,即Flink读取数据源的时间
Processing Time:执行操作算子的本地系统时间,与机器相关,即数据流入到某个具体算子(消息被计算处理)时候相应的系统时间,也就是Flink处理该事件时当前系统时间
window用来将无界流切分成有界流,对于window在Flink中主要有以下两种,即时间窗口和计数窗口
时间窗口顾名思义就是以时间来划分窗口,时间窗口又分为以下三种,即滚动时间窗口、滑动时间窗口和会话时间窗口
滚动窗口将依据固定的窗口长度对数据进行切分,窗口长度固定,没有重叠。而且只有当前一个窗口结束,下面一个窗口才会开始,每个数据只会被划分到一个窗口中。例如:如果指定大小为5分钟的滚动窗口,则将执行当前窗口,并且每5分钟将启动一个新窗口
滑动窗口是由固定的窗口长度和滑动间隔组成,窗口每次只会滑动固定的距离。窗口之间会有重叠,一个数据可能会存在于多个窗口中。例如:可以使用窗口大小为10分钟的窗口,滑动大小为5分钟,这样,每5分钟会生成一个窗口,包含最后10分钟到达的事件
会话窗口的窗口大小不固定,其窗口大小和数据相关,只要在一段时间内没有接收到新的数据,就会生成新的窗口
计数窗口与时间窗口类似,其与时间窗口的不同在于以数据的个数进行划分,而不是以时间划分,其主要分为滚动窗口和滑动窗口
- 点赞
- 收藏
- 关注作者
评论(0)