Flink|《Flink 官方文档 - 概念透析 - Flink 架构》学习笔记

这篇具有很好参考价值的文章主要介绍了Flink|《Flink 官方文档 - 概念透析 - Flink 架构》学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习文档:概念透析 - Flink 架构

学习笔记如下:


Flink 集群剖析

flink 学习文档,Flink,flink,架构,集群

  • 客户端(Client):准备数据流程序并发送给 JobManager(不是 Flink 执行程序的进程)
  • JobManager:协调 Flink 应用程序的分布式执行
    • ResourceManager:负责 Flink 集群中的资源提供、回收、分配
    • Dispatcher:提供了用来提交 Flink 应用程序执行的 REST 接口,并为每个提交的作业启动一个新的 JobMaster;运行 Flink WebUI 用来提供作业执行信息
    • JobMaster:负责管理单个 JobGraph 的执行;每个作业都有自己的 JobMaster。
  • TaskManager:执行作业流的 task,并且缓存和交换数据流
    • task slot:TaskManager 中资源调度的最小单位是 task slot;TaskManager 中 task slot 的数量表示并发处理 task 的数量;每个 task slot可以执行多个算子。
Tasks 和算子链

每个 task 由一个线程执行。

合并算子为算子链的原因:

  • 减少线程间切换、缓冲的开销
  • 减少延迟,增加整体吞吐量

flink 学习文档,Flink,flink,架构,集群

在上图中:

  • source 和 map 算子被合并为算子链
  • 从 parallelized view 中可以看到 5 个 subtask(每个虚线框为一个 subtask)
Task Slots 和资源
  • 每个 TaskManager 是一个 JVM 进程
  • 每个 subtask 是一个单独的线程
  • task slot 用于管理每个 TaskManager 中能够接收的 task 数量:TaskManager 会将内存平均分给每个 task slot,但不会分隔 CPU
多个 slot 共享同一个 Taskamanger 的示例图

flink 学习文档,Flink,flink,架构,集群

多个 slot 共享同一 JVM 进程的优点:共享 TCP 连接(通过多路复用)和心跳信息,共享数据集和数据结构,从而减少了每个 task 的开销

多个 subtask 共享 slot 的示例图

Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。

flink 学习文档,Flink,flink,架构,集群

允许 slot 共享有两个主要优点:

  • Flink 集群所需的 task slot 和作业中使用的最大并行度恰好一样。无需计算程序总共包含多少个 task(具有不同并行度)。
  • 容易获得更好的资源利用。如果没有 slot 共享,非密集 subtask(source/map())将阻塞和密集型 subtask(window) 一样多的资源。通过 slot 共享,我们示例中的基本并行度从 2 增加到 6,可以充分利用分配的资源,同时确保繁重的 subtask 在 TaskManager 之间公平分配。

Flink 应用程序执行

Flink Session 集群

集群生命周期:

  • 客户端连接到与现存在的、长期运行的集群
  • 集群可以接受多个作业提交
  • 即使所有作业完成后,集群(和 JobManager)仍将继续运行直到手动停止为止
  • 集群寿命不受任何 Flink 作业寿命的约束

资源隔离:文章来源地址https://www.toymoban.com/news/detail-805491.html

  • TaskManager slot 由 ResourceManager 在提交作业时分配,并在作业完成时释放
  • 集群资源方面存在一些竞争 — 例如提交工作阶段的网络带宽
  • 如果 TaskManager 崩溃,则在此 TaskManager 上运行 task 的所有作业都将失败
  • 如果 JobManager 上发生一些致命错误,它将影响集群中正在运行的所有作业

可以节省大量时间申请资源和启动 TaskManager;适用于作业执行时间短并且启动时间长会对端到端的用户体验产生负面影响的场景。

Flink Job 集群

集群生命周期:

  • 客户端首先从集群管理器请求资源启动 JobManager,然后将作业提交给在这个进程中运行的 Dispatcher,然后根据作业的资源请求惰性的分配 TaskManager
  • 集群管理器(例如 YARN)为每个提交的作业启动一个集群,并且该集群仅可用于该作业
  • 一旦作业完成,Flink Job 集群将被拆除

资源隔离:

  • JobManager 中的致命错误仅影响在 Flink Job 集群中运行的一个作业

ResourceManager 必须应用并等待外部资源管理组件来启动 TaskManager 进程和分配资源。适用于更适合长期运行、具有高稳定性要求且对较长的启动时间不敏感的大型作业。

Flink Application 集群

集群生命周期:

  • 仅从 Flink 应用程序执行作业,并且 main()方法在集群上而不是客户端上运行
  • 在提交作业时,将应用程序逻辑和依赖打包成一个可执行的作业 JAR 中,并且集群入口(ApplicationClusterEntryPoint)负责调用 main()方法来提取 JobGraph
  • Flink Application 集群的寿命与 Flink 应用程序的寿命有关

资源隔离:

  • ResourceManager 和 Dispatcher 作用于单个的 Flink 应用程序

到了这里,关于Flink|《Flink 官方文档 - 概念透析 - Flink 架构》学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink|《Flink 官方文档 - DataStream API - 算子 - 窗口》学习笔记

    学习文档:《Flink 官方文档 - DataStream API - 算子 - 窗口》 学习笔记如下: 窗口(Window):窗口是处理无界流的关键所在。窗口可以将数据流装入大小有限的 “桶” 中,再对每个 “桶” 加以处理。 Keyed Windows 在 Keyed Windows 上使用窗口时,要调用 keyBy(...) 而后再调用 window(..

    2024年01月18日
    浏览(37)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 配置 Flink 进程的内存》 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)

    2024年01月21日
    浏览(37)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记

    学习文档:Flink|《Flink 官方文档 - 部署 - 内存配置 - 配置 TaskManager 内存》学习笔记 学习笔记如下: Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。其中,Flink 总内存(Total Flink Memory)包括 JV

    2024年03月15日
    浏览(35)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 内存配置 - 网络缓冲调优》 学习笔记如下: Flink 中每条消息都会被放到网络缓冲(network buffer) 中,并以此为最小单位发送到下一个 subtask。 Flink 在传输过程的输入端和输出端使用了网络缓冲队列,即每个 subtask 都有一个输入队列来接收

    2024年01月21日
    浏览(45)
  • Flink|《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》 学习笔记如下: 当前,用户可以通过 CLI 提交 PyFlink 作业。对于通过 flink run 提交的 Python 作业,Flink 会执行 python 命令。因此,在启动 Python 作业前,需要先确定当前环境中的 python 命令指向 3.7+ 版本的 Pyt

    2024年02月22日
    浏览(45)
  • Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记

    学习文档: 《Flink 官方文档 - 部署 - 内存配置 - 调优指南》 《Flink 官方文档 - 部署 - 内存配置 - 常见问题》 学习笔记如下: 独立部署模式(Standalone Deployment)下的内存配置 通常无需配置进程总内存,因为不管是 Flink 还是部署环境都不会对 JVM 开销进行限制,它只与机器的

    2024年02月19日
    浏览(33)
  • Flink|《Flink 官方文档 - DataStream API - 状态与容错 - 使用状态》学习笔记

    学习文档:Flink 官方文档 - DataStream API - 状态与容错 - 使用状态 相关文档: 有状态流处理背后的概念:Flink|《Flink 官方文档 - 概念透析 - 有状态流处理》学习笔记 Redis 过期 key 的删除机制:Redis|过期 key 的删除机制 学习笔记如下: 如果要使用键控状态,则必须要为 DataS

    2024年02月03日
    浏览(35)
  • Flink|《Flink 官方文档 - DataStream API - 用户自定义 Functions》学习笔记 + 源码分析

    学习文档:Flink 官方文档 - DataStream API - 用户自定义 Functions 学习笔记如下: 用户可以通过实现接口来完成自定义 Functions。 实现接口并使用的样例: 使用匿名类实现的样例: 使用 Lambda 表达式实现(Java 8)样例: 所有的 Flink 函数类都有其 Rich 版本,在 Rick function 中,可以获

    2024年01月18日
    浏览(39)
  • Flink学习笔记(一):Flink重要概念和原理

        Apache Flink是一个框架和分布式处理引擎,用于对无限制和有限制的数据流进行有状态的计算。Flink被设计为可以在所有常见的集群环境中运行,以内存速度和任何规模执行计算。 官网:https://flink.apache.org/ 官网中文:https://flink.apache.org/zh/ Flink 开发文档:https://nightlies.

    2024年02月06日
    浏览(40)
  • 大数据:【学习笔记系列】Flink基础架构

    Apache Flink 是一个开源的流处理框架,用于处理 有界 和 无界 的 数据流 。Flink 设计用于 运行在所有常见的集群环境 中,并且能够以 高性能 和 可扩展 的方式进行实时数据处理和分析。下面将详细介绍 Flink 的基础架构组件和其工作原理。 1. Flink 架构概览 Flink 的架构主要包括

    2024年04月23日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包