Apache Flink - 分布式运行环境
1.任务和操作链
- 下面的数据流图有5个子任务执行,因此有五个并行线程。
2.Job Managers, Task Managers, Clients
- Job Managers:协调分布式运行,他们安排任务,协调检查点,recovery失败等等。至少有一个Job Managers,一个做leader,其他备用。
- Task Managers:执行数据流的任务,缓冲和交换数据流。至少要有一个Task Managers。
- client:客户端不是运行时和程序执行的一部分,但用于r准备和向JobManage发送数据流。客户端可以断开,或者保持联系接收进度报告。
3.任务槽和资源
- 每个woker(TaskManager)是一个JVM进程,可以在单独的线程中执行一个或更多的子任务。为了去控制一个worker接受多少任务,worker有了所谓的 task slots(至少一个)。
- 每个任务槽代表了TaskManager资源的一个固定的子集。
- 默认情况下,Flink允许子任务共享槽,即使他们是不同的任务的子任务,只要他们来自同样的job。这导致了一个槽可能拥有一个job的整个管道。
- the slot sharing 有两个好处:一.Flink集群在需要最高并行性的job中,需要完全尽可能多的任务槽,不需要计算一个程序包含多少任务(不同并行)。二.更容易获得更好的资源利用率。
- 根据经验法则,一个很好的默认任务槽数就是CPU核心数。 使用超线程(超线程),每个插槽需要2个或更多硬件线程环境。
4.后端状态
- 在key/values索引中的确切的数据结构的存储取决于所选的后端状态。
- 除了定义的数据结构保存状态,后端状态还实现了key/values的时间点快照状态和作为一个检查点的一部分存储快照的逻辑。
5.保存点
- 保存点是手动触发检查点,以程序的快照,写到后端状态。
- 在Data Stream API编写的程序从一个保存点可以恢复执行。保存点允许不用丢失任何状态更新程序和Flink集群。
- 在worker节点上,程序执行期间定期快照并产生检查点。
- 一个新的检查点产生,旧的就会被抛弃。
- 保存点类似于这些周期的检查点,除了它们由用户触发和当新的检查点完成时不会自动失效。保存点可以从命令行创建或通过REST API取消。