Flink分布式运行环境

运行时结构

Task线程

线程是程序运行时的最小单元,是进程中的一个实体,是被系统独立调度的基本单位,同属一个进程的所有线程共享进程所拥有的全部资源。
Flink的每个Operator称为一个任务(task),Operator的每个实例称为子任务,每个任务(Task)(包括子任务)在一个JVM线程中执行,可以将多个子任务链接成一个任务,在一个线程中执行,这会降低线程上下文切换产生的开销,减小缓存容量,提高系统吞吐量的同时降低延迟。此外,这种链接机制是可配置的,这增强了数据处理应用程序的灵活性。
在这里插入图片描述
在上图中,Source[1]和map()[1],Source[2]和map()[2]分别链接成了一个任务,这种编排是因为Source和map之间采用直连模式,它们之间的数据传输可以通过缓存而不是网络通信,正是这种针对性的优化提升了Flink的执行效率。
从上图可见,应用程序Operator的线程组成,也被称为作业(Job)。其中同一作业的一个传输通路也被称为一个管道,它用于连接多个命令,将一个命令的结果输出给下一个命令。如Source[1] - map()[1] - keyBy()/window()/apply()[1]和Sink[1]。

Manager进程

Flink由两类运行时JVM进程(process)管理分布式集群的计算资源。

  • JobManager进程负责分布式任务管理,如任务调度、检查点、故障恢复等。在高可用分布式部署时,系统中可有多个JobManager,即一个leader加多个standy。JobManager是Flink主从架构中的master。
  • Task Manager进程负责执行任务线程,以及缓存和传输stream。Task Manager是Flink主从架构中的worker。
    此外,作为作业的发起者,client向JobManager提交作业,但client不是集群中的一部分,
    在这里插入图片描述

线程共享Slot

为了控制执行的任务数量,TaskManager将计算资源划分为多个Task Slot,每个Task Slot独享给其分配的计算资源(只限于内存,CPU不会隔离),这种静态的资源管理方式有利于任务间资源隔离。
TaskManager可以配置成单Task Slot模式,这样这个worker上运行的任务就独占了整个JVM进程;同一个JVM进程上的多个任务可以共享TCP连接、心跳和数据。
在这里插入图片描述
Flink不允许属于不同作业的任务共享一个Slot,但运行同一作业的不同任务共享同一个Slot。因此同一个作业的所有任务可共享同一个Slot。如下图所示。
在这里插入图片描述

状态后端

存储键/值索引的确切数据结构取决于所选的状态后端。一个状态后端将数据存储在内存中的哈希映射中,另一个状态后端使用RocksDB作为键/值存储。除了定义保存状态的数据结构之外,状态后端还实现逻辑以获取键/值状态的时间点快照,并将该快照存储为检查点的一部分
在这里插入图片描述

保存点

用Data Stream API编写的程序可以从保存点恢复执行。保存点允许更新程序和Flink群集,而不会丢失任何状态。

保存点是手动触发的检查点,它捕获程序的快照并将其写入状态后端。他们依靠常规的检查点机制。在执行期间,程序会定期在工作节点上创建快照并生成检查点。对于恢复,仅需要最后完成的检查点,并且一旦完成新检查点就可以安全地丢弃旧检查点。

保存点与这些定期检查点类似,不同之处在于它们由用户触发,并且在较新的检查点完成时不会自动过期。可以从命令行创建保存点,也可以通过REST API取消作业。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值