知识点:
架构
解释:Flink是一个分层架构,每一层都以另一层为基础,Flink可以运行在本地机器上,也可以运行在集群上或cloud 上。而集群又分为(standalone:独立集群和YARN集群,我们用的是独立集群所以不需要安装YARN,Hadoop等)Runtime是核心处理引擎,以JobGraph的形式通过API接受程序。当程序被编译时,DataStream APIs 和 DataSet APIs能够生成JobGraphs。在这个过程中DataStream API通过优化器生成优化的执行方案,DataSet API通过创建流实现高效的执行方案。优化过的JobGraph会提交给Runtime执行。
分布式执行
Flink的分布式执行由两个重要的进程组成,master进程和worker进程,当执行Flink程序时,Job Manager, Task Manager, and Job Client会参与执行。
- Job Manager master进程,负责协调和管理程序的执行。许多master进程并行执行,其中有一个是leader。Job Manager包含三部分:Actor system, Scheduler, Check pointing
(1) Actor system
一个actor system是一个actor 容器,它提供诸如调度,配置,日志记录等服务,它也包含一个线程池用来产生actor,每一个新产生的actor都有一个父类,actor之间通过信息系统交换信息,存放在mailbox中,本地acotr通过共享内存,远程actor通过RPC calls。每一个actor都包含state和behavior两部分(由message决定),父类actor能够感知并处理子类错误,重启子类或者交给父类。
(2)Scheduler
执行程序又被称为task slots,一个Task Manager可以管理一个或多个task slots。SlotSharingGroup和CoLocationGroup决定tasks是共享task slot还是占有特定的task slot。
(3)Check pointing
Check pointing 提供容错机制。它不断的记录(snapshotting)分布式数据流和执行状态,数据流状态通常保存在HDFS等配置中。当出现故障时,Flink会停止程序并进行重置,从最近的checkpoint恢复执行。
stream barriers是snapshots的核心部分,他们被嵌入到数据流中,但不会超过记录,它们把一组记录作为一个snapshot,每一个barrier都有一个唯一的ID。
每一个snapshot的状态提交给JobManager的checkpoint coordinator,Flink会对齐记录避免重复处理相同记录,我们可以关闭对齐触发器来降低延迟。
2. Task Manager
Task managers 是在JVM中一个或多个线程中执行任务的工作节点,Task managers管理task slots的数量代表着任务执行的并行度
3. Job Client
Job Client 接收用户程序,以数据流的方式传递给Job Manager进行编译执行,最后Job Client把执行结果返回给用户。
程序转换为数据流
4. 特点
- 高性能低延迟
- Exactly-once stateful computation(确切的一次有状态计算)
- 灵活的流式窗口:窗口的设计可以基于时间,计数,或会话
- Fault tolerance:轻量级的snapshot机制
- 内存管理:Flink在JVM内部实现了自己的内存管理
- optimiser(优化)
- 在一个平台上进行流处理和批处理:批处理可以看作是特殊的流处理
- 库:Flink拥有一套丰富的库
- Event time semantics(事件时间语义):Flink支持事件时间语义,这有助于处理事件无序到达的流,
名词解释:
API ------Application Programming Interface,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
YARN-------Yet Another Resource Negotiator,是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
Scala------一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。
JobGraph-------一个简单的并行数据流,包含一组产生和使用数据流的任务。
HDFS--------Hadoop Distributed File System,HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求这样可以实现以流的形式访问文件系统中的数据。