flink中的作业,任务和子任务之间的区别

孙兴斌*_*孙兴斌 4 apache-flink

我是flink的新手,并试图理解:

  1. 工作
  2. 任务
  3. 子任务

我在文档中进行了搜索,但仍然没有得到。它们之间的主要区别是什么?

Dav*_*son 10

此处说明了任务和子任务-https : //ci.apache.org/projects/flink/flink-docs-release-1.7/concepts/runtime.html#tasks-and-operator-chains

在此处输入图片说明

任务是一个抽象概念,代表可以在单个线程中执行的一系列操作符。诸如keyBy(这会导致网络改组通过某个密钥对流进行划分)之类的事情,或者管线并行性的变化都会破坏链接,并迫使运营商分担不同的任务。在上图中,该应用程序具有三个任务。

子任务是任务的一个并行切片。这是可调度的,可运行的执行单元。在上图中,源/地图和keyBy / Window / apply任务的应用程序并行度为2,接收器的并行度为1,因此总共运行了5个子任务。

作业是应用程序的运行实例。客户将作业提交给作业管理器,作业将其切成子任务并安排这些子任务供任务管理器执行。

  • 任务和子任务在概念和代码上的设计和实现都是最糟糕的。subtask 是线程运行的最小工作单元,但在 Flink 源代码中,没有名为 Subtask 或类似名称的类。有线的是,有一个名为Task的类,它实现了Runanble,这意味着Task是在线程中运行的单元,这与上图完全不同 (4认同)