专栏首页大数据进阶【译】A Deep-Dive into Flink's Network Stack(1)

【译】A Deep-Dive into Flink's Network Stack(1)

Flink的网络堆栈是组成flink-runtime模块的核心组件之一,是每个Flink工作的核心。 它连接所有TaskManagers的各个工作单元(子任务)。 这是您的流式传输数据流经的地方,因此,对于吞吐量和您观察到的延迟,Flink作业的性能至关重要。 与通过Akka使用RPC的TaskManagers和JobManagers之间的协调通道相比,TaskManagers之间的网络堆栈依赖于使用Netty的低得多的API。

这篇博文是关于网络堆栈的一系列帖子中的第一篇。 在下面的部分中,我们将首先深入了解流操作符所呈现的抽象,然后详细介绍Flink的物理实现和各种优化。 我们将简要介绍这些优化的结果以及Flink在吞吐量和延迟之间的权衡。 本系列中的未来博客文章将详细介绍监控和指标,调整参数和常见的反模式。

逻辑视图

Flink的网络堆栈在相互通信时为子任务提供以下逻辑视图,例如在keyBy()要求的网络混洗期间。

它抽象了以下三个概念的不同设置:

  • 子任务输出类型(ResultPartitionType):
  1. 流水线的(有界的或无界的):一旦产生数据就可以向下游发送,可能是一个接一个地,作为有界或无界的记录流。
  2. 阻塞:仅在生成完整结果时向下游发送数据。
  • 调度类型:
  1. 一次性(急切):同时部署作业的所有子任务(用于流应用程序)。
  2. 第一个输出的下一个阶段(懒惰):一旦任何生产者生成输出,就立即部署下游任务。
  3. 完整输出的下一个阶段:当任何或所有生产者生成完整输出集时,部署下游任务
  • 传输:
  1. 高吞吐量:Flink不是一个一个地发送每个记录,而是将一堆记录缓冲到其网络缓冲区中并完全发送它们。这降低了每个记录的成本并导致更高的吞吐量。
  2. 通过缓冲区超时的低延迟:通过减少发送未完全填充的缓冲区的超时,您可能会牺牲吞吐量来延迟

我们将在下面的部分中查看吞吐量和低延迟优化,这些部分将查看网络堆栈的物理层。 对于这一部分,让我们详细说明输出和调度类型。 首先,重要的是要知道子任务输出类型和调度类型是紧密交织在一起的,只能使两者的特定组合有效。

流水线结果分区是流式输出,需要实时目标子任务才能发送数据。 可以在生成结果之前或首次输出时安排目标。 批处理作业生成有界结果分区,而流式处理作业产生无限结果。

批处理作业也可能以阻塞方式产生结果,具体取决于所使用的运算符和连接模式。 在这种情况下,必须先生成完整的结果,然后才能安排接收任务。 这允许批处理作业更有效地工作并且资源使用更少。

批处理作业也可能以阻塞方式产生结果,具体取决于所使用的运算符和连接模式。 在这种情况下,必须先生成完整的结果,然后才能安排接收任务。 这允许批处理作业更有效地工作并且资源使用更少。

下表总结了有效组合:

1目前Flink未使用。

2批量/流式统一完成后,这可能适用于流式作业。

此外,对于具有多个输入的子任务,调度以两种方式启动:在所有或在任何输入生成器生成记录/其完整数据集之后。 要调整批处理作业中的输出类型和调度决策,请查看ExecutionConfig #setExecutionMode() - 特别是ExecutionMode - 以及ExecutionConfig #setDefaultInputDependencyConstraint()

物理运输

为了理解物理数据连接,请回想一下,在Flink中,不同的任务可以通过插槽共享组共享相同的插槽。 TaskManagers还可以提供多个插槽,以允许将同一任务的多个子任务安排到同一个TaskManager上。

未完待续

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【转】Go 语言函数

    Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的...

    yiduwangkai
  • 【译】A Deep-Dive into Flink's Network Stack(2)

    对于下图所示的示例,我们将假设4的并行性和具有两个任务管理器的部署,每个任务管理器提供2个插槽。 TaskManager 1执行子任务A.1,A.2,B.1和B...

    yiduwangkai
  • flink系列(2)-基础架构

    上一篇从宏观上说了一些基础组件,这一篇,我们来说一下flink架构中涉及的一些组件

    yiduwangkai
  • 学界 | DeepMind新研究:使用强化对抗学习合成图像程序

    AI 科技评论按:近日,DeepMind 发表的一篇博客中提到了一种新的人工智能体,它可以推断数字,角色和肖像的构造方式。更为关键的是,它们是自己学会做这件事,...

    AI科技评论
  • DeepMind 新研究:使用强化对抗学习合成图像程序

    AI 研习社:近日,DeepMind 发表的一篇博客中提到了一种新的人工智能体,它可以推断数字,角色和肖像的构造方式。更为关键的是,它们是自己学会做这件事,而不...

    AI研习社
  • .NET Core 使用HMAC算法

    通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口令是否正确,我们用保存在数据库中的password_md5对比计算md5...

    晓晨
  • 生信自动化流程搭建 04 | 输出 output

    输出定义以输出限定符和输出名称开头,后跟关键字into和一个或多个通过其发送输出的通道。最后,可以指定一些可选属性。

    白墨石
  • 第二天培训小笔记

    第一次握手:建立连接,客户端发送syn包到服务器,等待确认 (SYN:同步序列编号) 第二次握手:服务器确认客户的syn包,同时自己也发送一个确认包ACK给客户...

    Elapse
  • C#/WinForm给控件加入hint文字

    以前在手机上(wp)上做过类似的效果。参考silverlight toolkit 的searchTextBox。现在要在winform下制作,开始我还以为应该有...

    跟着阿笨一起玩NET
  • 用R语言进行Cox回归生存分析

    在生存分析中,探究生存时间的影响因素是一个重要的研究内容,通过KM和log-rank test检验的方法,只能够处理单个二分类因素的生存数据。当想探究多个因素或...

    生信修炼手册

扫码关注云+社区

领取腾讯云代金券