背景
Apache Flink是用于分布式流和批处理数据处理的开源平台。Flink的核心是流数据流引擎,可为数据流上的分布式计算提供数据分发,通信和容错能力。Flink在流引擎之上构建批处理,覆盖了本机迭代支持,托管内存和程序优化。本文档适用于Apache Flink 1.10版。
学习Flink就要先从相关基本概念了解,才能更好理解笔者下一篇文章“Flink优化器与源码解析系列--Flink内存模型详解”。才能更好的理解Flink分布式运行原理。
基本概念
- Flink Application ClusterFlink应用程序集群
Flink应用程序集群是仅执行一个Flink Job专用的Flink Cluster。Flink Cluster的生命周期就是Flink Job的生命周期。在工作模式下,相对于与Flink Session Cluster而言,之前的Flink应用程序集群也称为Flink集群 。
- Flink Cluster Flink集群
通常由一个Flink Master和一个或多个 Flink TaskManager进程组成的一种分布式系统。
- Event 事件
事件是有关由应用程序建模的域的状态更改的声明。事件可以是流或批处理应用程序的输入和/或输出。事件是特殊类型的记录。
- Function 函数
功能由用户实现,并封装Flink程序的应用程序逻辑。大多数函数由相应的运算符包装 。
- Instance 实例
术语实例用于描述特定类型的(通常的特定实例 操作或功能在运行期间)。由于Apache Flink主要是用Java编写的,因此它对应于Java中的Instance或Object的定义。在Apache Flink的上下文中,术语“ 并行实例”也经常用来强调相同操作符或函数类型的多个实例正在并行运行。
- Flink Job Flink作业
Flink作业是Flink程序的运行时表示形式。Flink作业既可以提交到长期运行的Flink会话集群,也可以作为独立的Flink应用程序集群启动。
- Flink JobManager Flink作业管理器
JobManager是Flink Master中运行的组件之一。JobManager负责监督单个作业的任务执行。在历史上,整个Flink Master都称为JobManager。
- Logical Graph 逻辑图
逻辑图是描述流处理程序的高层次逻辑的有向图。节点是操作符Operators,边edges指示数据流或数据集相应的操作符Operators的输入/输出关系。
- Managed State 管理状态
管理状态描述了已在框架中注册的应用程序状态。对于管理状态,Apache Flink将特别关注持久性和重新缩放。
- Flink Master
Flink主机是Flink群集的主机。它包含三个不同的组件:Flink资源管理器,Flink调度程序和 每个运行的Flink Job一个Flink JobManager。
- Operator 操作符或算子
逻辑图的节点。操作符执行某种操作,通常由Function执行。Sources 和 Sinks是用于数据摄取和数据出口的特殊操作符Operators。
- Operator Chain 操作链
一个操作符链由两个或多个连续的操作符Operators组成,中间没有任何重新分配。同一操作符链中的操作符Operators无需经过序列化或Flink的网络堆栈即可直接将记录彼此传输。
- Partition 分区
分区是整个数据流或数据集的独立子集。通过将每个记录分配给一个或多个分区,将数据流或数据集划分为多个分区。任务Task在运行时使用数据流或数据集的分区。改变数据流或数据集分区方式的转换通常称为重新分区repartitioning。
- Physical Graph 物理图
物理图是转换逻辑图以在分布式运行时中执行的结果。节点是任务,边缘指示数据流或数据集的输入/输出关系或分区。
- Record 记录
记录是数据集或数据流的组成元素。操作符Operators和函数接收记录作为输入,并发出记录作为输出。
- Flink Session Cluster Flink会话集群
长期运行的Flink群集,它接受多个Flink作业来执行。此Flink群集的生命周期与每个Flink作业的生命周期有关。以前,Flink Session Cluster Flink会话群集在会话模式下也称为Flink群集。
- State Backend 后端状态
对于流处理程序,Flink作业的后端状态确定如何在每个TaskManager(TaskManager的Java堆或(嵌入式)RocksDB)上存储其状态,以及如何在检查点checkpoint上写入状态(Flink Master或文件系统的Java堆) )。
- Sub-Task 子任务
子任务是负责处理数据流分区partition的任务。术语“子任务”强调针对同一操作符或算子Operator or Operator Chain有多个并行任务 。
- Task 任务
物理图的节点。任务是基本工作单元,由Flink的运行时执行。任务恰好封装了一个操作符或算子Operator or Operator Chain的并行实例 。
- Flink TaskManager Flink任务管理器
TaskManager是Flink群集的工作进程worker processes。任务Task安排在TaskManager中执行。它们彼此通信以在后续任务之间交换exchange数据。
- Transformation 转换
将转换应用于一个或多个数据流或数据集,并产生一个或多个输出数据流或数据集。转换可能会更改每个记录的数据流或数据集,但也可能仅更改其分区或执行聚合。尽管操作符或算子Operators和函数Functions是Flink API的“物理”部分,但转换只是API概念。具体而言,大多数转换是由某些操作符或算子Operators实现的
总结
本篇文章介绍Flink相关基本概念,其是学习Flink的开始,更深入理解Flink分布式运行原理和内存模型构成,如何调优内存和故障排除等问题。