Apache Flink
来自站长百科
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态的计算。Flink被设计成在所有常见集群环境中运行,以内存执行和故障快速恢复为目标。
Flink特点[ ]
- 支持事件时间语义和持续数据处理;
- 支持有状态的计算;
- 支持实时窗口操作;
- 支持exactly-once语义;
- 支持增量检查点和保存点;
- 支持异步I/O和回调。
Flink结构[ ]
Client[ ]
Flink Client主要给用户提供向Flink系统提交用户任务(流式作业)的能力。
TaskManager[ ]
Flink系统的业务执行节点,执行具体的用户任务。TaskManager可以有多个,各个TaskManager都平等。
JobManager[ ]
Flink系统的管理节点,管理所有的TaskManager,并决策用户任务在哪些TaskManager执行。JobManager在HA模式下可以有多个,但只有一个主JobManager。
Flink原理[ ]
1、Stream & Transformation & Operator
用户实现的Flink程序是由Stream和Transformation这两个基本构建块组成。
Stream是一个中间结果数据,而Transformation是一个操作,它对一个或多个输入Stream进行计算处理,输出一个或多个结果Stream。
当一个Flink程序被执行的时候,它会被映射为Streaming Dataflow。一个Streaming Dataflow是由一组Stream和Transformation Operator组成,它类似于一个DAG图,在启动的时候从一个或多个Source Operator开始,结束于一个或多个Sink Operator。
2、Pipeline Dataflow
在Flink中,程序是并行和分布式的方式运行。一个Stream可以被分成多个Stream分区(Stream Partitions),一个Operator可以被分成多个Operator Subtask。
Flink与Yarn的关系[ ]
- Flink Yarn Client首先会检验是否有足够的资源来启动Yarn集群,如果资源足够,会将Jar包、配置文件等上传到HDFS。
- Flink Yarn Client首先与Yarn Resource Manager进行通信,申请启动Application Master(以下简称AM)的Container,并启动AM。等所有的Yarn的Node Manager将HDFS上的Jar包、配置文件下载后,则表示AM启动成功。
- AM在启动的过程中会和Yarn的RM进行交互,向RM申请需要的Task Manager Container,申请到Task Manager Container后,启动TaskManager进程。
- 在Flink Yarn的集群中,AM与Flink JobManager在同一个Container中。AM会将JobManager的RPC地址通过HDFS共享的方式通知各个TaskManager,TaskManager启动成功后,会向JobManager注册。
- 等所有TaskManager都向JobManager注册成功后,Flink基于Yarn的集群启动成功,Flink Yarn Client就可以提交Flink Job到Flink JobManager,并进行后续的映射、调度和计算处理。