Streaming Processing Concepts(流处理基本概念)
Bounded and UnBounded Data and Processing(有界和无界数据)
latency and throughput(延迟和吞吐量)
Time Semantics(时间语义)
- Processing Time
- Event Time
- Wartermarks
- Windows
- Trigger
Architecture(架构)
Layered Apis(API层级)
- SQL/Table API (dynamic tables)
- DataStream API (stream, windows)
- Process Function(events, state, time)
Components of a Flink Setup (flink 组件)
-
Jobmanager(也叫 masters)
jobmanager负责协调分布式执行。 调度任务,协调检查点,协调故障恢复等。
至少要有一个jobmanager, 高可用性设置将有多个JobManager,其中一个始终是leader,而其他则是standby。
-
Taskmanager(也叫workers)
执行任务(或更具体地说,子任务),并缓冲和交换数据流。
必须始终至少有一个TaskManager。
-
Clients(flink-clients)
client 并不是runtime和程序执行的一部分, 它只是用于准备和构建program以及发送dataflow给Jobmanager。之后可以断开连接,也可以驻留进程接收数据。client可以通过Java/Scala语言编写触发任务执行,也可以使用flink的./bin/flink run 脚本执行。
Task Execution(任务执行)
Operators - 比如source map reduce sink
-
Tasks - 多个Operators组成一个task
- Setting Parallelism(设置并行度) - 级别从高到低
- Operator Level - 算子级别
- Execution Enverionment Level - env级别
- Client Level - ./bin/flink run 级别
- System Level (set in flink-conf.yaml) - 配置文件级别
- Task Failure Recovery(失败恢复)
- Setting Parallelism(设置并行度) - 级别从高到低
Job - 所有的Task组成一个job
-
Slot and Resources
每个worker (TaskManager) 是一个JVM进程,并且可以在单独的线程(slots)中执行一个或者多个子任务. 一个worker为了能够接收多个task, 就把worker平均分成多个slot。slot之间只是内存的隔离,并没有发生CPU的隔离。每个slot在同一JVM中的任务共享TCP连接(通过多路复用)和心跳消息。 它们还可以共享数据集和数据结构,从而减少每个任务的开销。
默认情况下,Flink允许子任务共享slot,即使它们是不同任务的子任务也是如此,只要它们来自同一Job即可。 允许此插槽共享有两个主要好处:
Flink集群所需的任务槽与作业中使用的最高并行度恰好一样。 无需计算一个程序总共包含多少个任务(并行度各不相同)。
-
更容易获得更好的资源利用率。 如果没有插槽共享,则非密集型source / map()子任务将阻塞与资源密集型窗口子任务一样多的资源。 通过插槽共享,我们示例中的基本并行度从2增加到6,可以充分利用插槽资源,同时确保沉重的子任务在TaskManager之间公平分配。