1.运行架构:
Source: 数据源, 常见数据源:本地数据集合,文件,网络套接字,自定义(Kafka, RabbitMQ)等source.
Transformation: 数据转换操作, 有Map/FlatMap/Filter/KeyBy/Reduce/Fold/Aggregations/Window/
WindowAll/Union/Window join/Split/Select等.
Sink: 接收器,Flink 将转换计算后的数据发送出去。常见的有:写入文件,打印,写入socket,自定义(Kafka, RabbitMQ,Mysql,ElasticSearch,Cassandra,Hadoop FileSystem)等
2: Flink 并行数据流
Flink程序在执行的时候,会被映射成一个Streaming Dataflow(由一组Stream和Transformation Operator组成)。启动从一个或多个Source Operator开始,结束于一个或多个Sink Operator。
Flink程序运行是并行和分布式的,执行的时候,一个stream包含一个或多个分区,一个operator包含1个或多个operator子任务。操作子任务间相互独立,在不同线程甚至分布在不同的机器或容器上。operator子任务的数量是此operator的并行度。相同程序中不同的operator有不同的级别的并行度。
3.任务调度和执行
- Flink Client: 客户端获取代码并做转换,之后提交给JobManager
- JobManager: 对作业进行调度管理;再获取到要执行的作业后,进一步处理转换,然后分发任务给众多的TaskManager.
TaskManager: 从JobManager接收任务,并部署启动任务,接上游数据并处理。TaskManager创建的时候设置了Slot,没个Slot可以执行一个任务Task. 每个TaskManager是一个JVM的进程,可以在不同的线程中执行一个或多个子任务。
4.任务槽
图中有2个TaskManager,每个TaskManager有3个slot。
Flink允许子任务共享slot,即使是不同任务的子任务,只要它们来自同一个作业。一个slot可以保存作业的整个管道。有了任务槽共享,可以将基本并行度从2提升到6.提高了分槽资源的利用率。