Apache Flink-编程指南-概念-分布式运行环境

任务和操作链

在flink的分布式执行中,Flink把操作子任务链在一起形成任务。每一个任务由一个线程执行。把操作链接在一起成为任务是一个有用的优化:这样做会减少线程间的切换和缓冲的消耗,增加整体吞吐量,降低延迟。这种链接行为可以配置;查看chaining docs关于更多细节。

下图的数据流的列子由5个子任务执行,因此有5个并行的线程。

Operator chaining into Tasks

 

Job Managers, Task Managers, Clients

Flink运行环境由两类进程组成:

  • The JobManagers (也称为masters) 协调分布式执行。调度任务,协调检查点,协调失败恢复,等等。

    总是至少有一个Job Manager。在HA设置中有多个JobManagers,其中一个是leader,其他是standby。

  • The TaskManagers (也称为workers执行数据流任务(更确切的说是子任务),缓存或交换数据流。至少有一个TaskManager。

JobManagers和TaskManagers 可以以各种方式启动:直接在机器上以standalone cluster,在容器中或被资源管理框架管理如YARNMesos。 TaskManagers连接JobManagers,通知JobManagers自己是可用的,可以分配任务。

client不是程序执行环境的一部分,而是准备和发送数据流给JobManager。之后,client可以断开连接,或者保持连接以接收进度报告。客户端可以以Java/Scala程序的方式触发运行,或在命令行中运行命令 ./bin/flink run ....

The processes involved in executing a Flink dataflow

 

任务槽和资源

每个worker (TaskManager) 是一个JVM进程,在各自独立的线程中执行一个或多个子任务。控制一个worker接收多少任务,称之为任务槽(至少一个)。

每个任务槽代表TaskManager上固定量的资源的子集。一个TaskManager有3个任务槽,例如,会分配其管理的内存的1/3给每个槽。对资源的划分意味着一个子任务的不必与其他job的子任务竞争内存。注意不存在CPU隔离的情况;当前槽只会分隔任务管理的内存。

通过调整任务槽的数量,用户可以定义子任务之间如何隔离。拥有一个槽的TaskManager意味着每个task运作在隔离的JVM中(在隔离的容器中启动)。拥有多个任务槽意味着更多子任务共享JVM。在同一个JVM的任务共享TCP连接(通过复用)和心跳信息。他们还可以共享数据集和数据结构 ,这会减少每个任务的开销。

A TaskManager with Task Slots and Tasks

默认地,Flink允许子任务共享槽即使它们所属不同任务的子任务,只要它们来自相同的job。结果是,一个槽可能持有job的整个管道。允许槽共享有两个主要的好处:

  • Flink集群需要与作业中使用的最高并行度一样多的任务槽。不需要计算程序总共包含多少任务(具有不同的并行度)。

  • 更容易更好的利用资源。如果没有槽共享,非密集型source/map()子任务将阻塞与资源密集型窗口子任务一样多的资源。通过插槽共享,将示例中的基本并行度从2提高到6,可以充分利用有槽资源,同时确保繁重的子任务在taskmanager中公平分配。

TaskManagers with shared Task Slots

这些api还包括一个资源组机制,可以用来防止不需要的插槽共享。

根据经验,一个好的默认任务槽数是CPU内核数。对于超线程,每个插槽需要2个或更多的硬件线程上下文。

状态后端

键/值索引存储的确切数据结构取决于所选的状态后端。一个状态后端在内存hash map中存储数据,另一个状态后端使用RocksDB作为键/值存储。除了定义保存状态的数据结构外,状态后端还实现了获取键/值状态的时间点快照的逻辑,并将该快照存储为检查点的一部分。

checkpoints and snapshots

 

保存点

在数据流API中编写的程序可以从保存点恢复执行。保存点允许在不丢失任何状态的情况下更新程序和Flink集群。保存点是手动触发的检查点,它获取程序的快照并将其写入状态后端。它们依赖于常规的检查点机制。在执行过程中,在工作节点上定期对程序进行快照,并生成检查点。为了恢复,只需要最后一个完成的检查点,旧的检查点一旦完成就可以安全地丢弃。保存点类似于这些定期检查点,只是它们由用户触发,并且在新检查点完成时不会自动过期。可以从命令行或通过REST API取消作业时创建保存点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值