注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

Flink 基础

Apache Flink 是一个分布式计算引擎,能够以低延迟处理无限数据集,使其能够处理常见的流式工作流。Foundry 流使用 Flink 作为底层引擎来执行用户代码和其他平台内流应用程序,例如实时填充 Ontology 和流式时间序列摄取。

为了了解您的流应用案例是否需要额外的任务配置,了解 Flink 的工作原理是有帮助的。

关于 Flink 的更多详细文档可以在 Flink 首页 ↗ 找到。

所有流任务都被描述为一系列作用于一组数据源的操作,并将结果写入数据汇。 这些操作包括诸如聚合、合并和其他行级操作,例如字符串解析或算术。 每个操作在 Flink 中都由算子抽象表示。在 Flink 中,源和汇也由算子描述。

Flink 任务在内部以“任务图”或“逻辑图”表示。 任务图是由算子组成的节点构成的有向图,其中边缘定义算子之间的关系。 当一个任务提交到 Flink 时,它会创建任务图。 您的 Flink 任务的任务图预览会在 Foundry 任务跟踪器中的详情部分呈现。

在实际执行任务时,Flink 将逻辑图转换为物理图,即算子将在计算运行时上执行的表示。 物理图由任务组成,这是 Flink 任务中的基本工作单元,可以表示一个算子的一个实例或多个算子链。

任务管理器和作业管理器

与 Spark 类似,Flink 的运行时架构包括不同类型的工作者。 Spark 使用驱动程序来协调和管理任务并使用执行器来执行任务,Flink 使用任务管理器作业管理器,它们的角色大致类似于 Spark 的驱动程序和执行器。

Flink 作业管理器负责调度任务和分配任务资源,处理已完成或失败的任务,协调任务检查点和故障恢复,并提供对任务信息的程序化访问。 通常,在任何给定时间,只有一个活跃的作业管理器 - 领导者 - 备用作业管理器在发生不可恢复的错误时保持热备用。

Flink 任务管理器负责任务的执行以及在流之间缓冲和交换数据。 总是至少有一个任务管理器,但可能会有更多任务管理器以实现流处理的并行化。 当任务管理器需要处理非常大的记录时,可能需要额外的资源。 如果您的流具有极高的吞吐量,则可能需要增加任务的并行度,这会导致增加任务管理器的数量。

任务状态

虽然一些 Flink 操作只需要单独查看单个事件,但其他操作需要记住多个事件的信息。 这些是有状态操作。 有状态操作的一些例子是:

  • 聚合: 例如,计算滚动五分钟窗口内事件的总数,或计算所有已知事件的运行平均值。
  • 合并: 执行引擎需要了解以前看到的事件,以便将它们与当前正在摄取的事件合并。

有状态操作所需的信息称为任务状态,Flink 使用状态后端存储这些信息。状态由任务管理器管理和存储,并由作业管理器以检查点的形式协调。当您有较大的状态(例如,当聚合或合并具有非常大的窗口时),您的作业管理器和任务管理器可能需要额外的资源。