首页 > 其他分享 >Apache Flink 2.0介绍与部署(最新版本)

Apache Flink 2.0介绍与部署(最新版本)

时间:2025-01-23 15:28:48浏览次数:3  
标签:task Flink 作业 TaskManager API 集群 Apache 2.0

软件概述

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。

在德语中,Flink一词表示快速和灵巧,项目采用一只松鼠的彩色图案作为logo,这不仅是因为松鼠具有快速和灵巧的特点,还因为柏林的松鼠有一种迷人的红棕色,而Flink的松鼠logo拥有可爱的尾巴,尾巴的颜色与Apache软件基金会的logo颜色相呼应,也就是说,这是一只Apache风格的松鼠。

Flink起源于Stratosphere项目,Stratosphere是在2010~2014年由3所地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目,2014年4月Stratosphere的代码被复制并捐赠给了Apache软件基金会,参加这个孵化项目的初始成员是Stratosphere系统的核心开发人员,2014年12月,Flink一跃成为Apache软件基金会的顶级项目。

Flink虽然诞生的早(2010年),但是其实是起大早赶晚集,直到2015年才开始突然爆发热度。

在Flink被apache提升为顶级项目之后,阿里实时计算团队决定在阿里内部建立一个 Flink 分支 Blink,并对 Flink 进行大量的修改和完善,让其适应阿里巴巴这种超大规模的业务场景。

Blink由2016年上线,服务于阿里集团内部搜索、推荐、广告和蚂蚁等大量核心实时业务。与2019年1月Blink正式开源,目前阿里70%的技术部门都有使用该版本。

Blink比起Flink的优势就是对SQL语法的更完善的支持以及执行SQL的性能提升。

Apache  Flink社区已于2024-10-23发布了Flink 2.0版本,这是自Flink 1.0发布以来的首个重大更新。Flink2.0将引入多项激动人心的功能和改进,包括存算分离状态管理Q、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈。
注意:Flink 2.0 preview版,而不是 stable 版本,所以请不要应用于生产环境。

官网地址:Apache Flink® — Stateful Computations over Data Streams | Apache Flink

资料地址:Apache Flink Documentation | Apache Flink

软件架构

Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop YARN,但也可以设置作为独立集群甚至库运行。

本节概述了 Flink 架构,并且描述了其主要组件如何交互以执行应用程序和从故障中恢复。

Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager

Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...中运行。

可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。

JobManager

JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager

    ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。

  • Dispatcher

    Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。

  • JobMaster

    JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。

TaskManagers

TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。

必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子(请参考Tasks 和算子链)。

Tasks 和算子链

对于分布式执行,Flink 将算子的 subtasks 链接成 tasks。每个 task 由一个线程执行。将算子链接成 task 是个有用的优化:它减少线程间切换、缓冲的开销,并且减少延迟的同时增加整体吞吐量。链行为是可以配置的;请参考链文档以获取详细信息。

下图中样例数据流用 5 个 subtask 执行,因此有 5 个并行线程。

Task Slots 和资源

每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。

每个 task slot 代表 TaskManager 中资源的固定子集。例如,具有 3 个 slot 的 TaskManager,会将其托管内存 1/3 用于每个 slot。分配资源意味着 subtask 不会与其他作业的 subtask 竞争托管内存,而是具有一定数量的保留托管内存。注意此处没有 CPU 隔离;当前 slot 仅分离 task 的托管内存。

通过调整 task slot 的数量,用户可以定义 subtask 如何互相隔离。每个 TaskManager 有一个 slot,这意味着每个 task 组都在单独的 JVM 中运行(例如,可以在单独的容器中启动)。具有多个 slot 意味着更多 subtask 共享同一 JVM。同一 JVM 中的 task 共享 TCP 连接(通过多路复用)和心跳信息。它们还可以共享数据集和数据结构,从而减少了每个 task 的开销。

默认情况下,Flink 允许 subtask 共享 slot,即便它们是不同的 task 的 subtask,只要是来自于同一作业即可。结果就是一个 slot 可以持有整个作业管道。允许 slot 共享有两个主要优点:

  • Flink 集群所需的 task slot 和作业中使用的最大并行度恰好一样。无需计算程序总共包含多少个 task(具有不同并行度)。

  • 容易获得更好的资源利用。如果没有 slot 共享,非密集 subtask(source/map())将阻塞和密集型 subtask(window) 一样多的资源。通过 slot 共享,我们示例中的基本并行度从 2 增加到 6,可以充分利用分配的资源,同时确保繁重的 subtask 在 TaskManager 之间公平分配。

Flink 应用程序 是从其 main() 方法产生的一个或多个 Flink 作业的任何用户程序。这些作业的执行可以在本地 JVM(LocalEnvironment)中进行,或具有多台机器的集群的远程设置(RemoteEnvironment)中进行。对于每个程序,ExecutionEnvironment 提供了一些方法来控制作业执行(例如设置并行度)并与外界交互(请参考 Flink 程序剖析 )。

Flink 应用程序的作业可以被提交到长期运行的 Flink Session 集群、专用的 Flink Job 集群 或 Flink Application 集群。这些选项之间的差异主要与集群的生命周期和资源隔离保证有关。

  • 集群生命周期:在 Flink Session 集群中,客户端连接到一个预先存在的、长期运行的集群,该集群可以接受多个作业提交。即使所有作业完成后,集群(和 JobManager)仍将继续运行直到手动停止 session 为止。因此,Flink Session 集群的寿命不受任何 Flink 作业寿命的约束。

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

  • 其他注意事项:拥有一个预先存在的集群可以节省大量时间申请资源和启动 TaskManager。有种场景很重要,作业执行时间短并且启动时间长会对端到端的用户体验产生负面的影响 — 就像对简短查询的交互式分析一样,希望作业可以使用现有资源快速执行计算。

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

  • 资源隔离:JobManager 中的致命错误仅影响在 Flink Job 集群中运行的一个作业。

  • 其他注意事项:由于 ResourceManager 必须应用并等待外部资源管理组件来启动 TaskManager 进程和分配资源,因此 Flink Job 集群更适合长期运行、具有高稳定性要求且对较长的启动时间不敏感的大型作业。

  • 集群生命周期:Flink Application 集群是专用的 Flink 集群,仅从 Flink 应用程序执行作业,并且 main()方法在集群上而不是客户端上运行。提交作业是一个单步骤过程:无需先启动 Flink 集群,然后将作业提交到现有的 session 集群;相反,将应用程序逻辑和依赖打包成一个可执行的作业 JAR 中,并且集群入口(ApplicationClusterEntryPoint)负责调用 main()方法来提取 JobGraph。例如,这允许你像在 Kubernetes 上部署任何其他应用程序一样部署 Flink 应用程序。因此,Flink Application 集群的寿命与 Flink 应用程序的寿命有关。

  • 资源隔离:在 Flink Application 集群中,ResourceManager 和 Dispatcher 作用于单个的 Flink 应用程序,相比于 Flink Session 集群,它提供了更好的隔离。

Flink Job 集群可以看做是 Flink Application 集群”客户端运行“的替代方案。

Flink之API

  • Flink API 最底层的抽象为有状态实时流处理。其抽象实现是 Process Function,并且 Process Function 被 Flink 框架集成到了 DataStream API 中来为我们使用。它允许用户在应用程序中自由地处理来自单流或多流的事件(数据),并提供具有全局一致性和容错保障的状态。此外,用户可以在此层抽象中注册事件时间(event time)和处理时间(processing time)回调方法,从而允许程序可以实现复杂计算。

  • Flink API 第二层抽象是 Core APIs。实际上,许多应用程序不需要使用到上述最底层抽象的 API,而是可以使用 Core APIs 进行编程:其中包含 DataStream API(应用于有界/无界数据流场景)。Core APIs 提供的流式 API(Fluent API)为数据处理提供了通用的模块组件,例如各种形式的用户自定义转换(transformations)、联接(joins)、聚合(aggregations)、窗口(windows)和状态(state)操作等。此层 API 中处理的数据类型在每种编程语言中都有其对应的类。

    Process Function 这类底层抽象和 DataStream API 的相互集成使得用户可以选择使用更底层的抽象 API 来实现自己的需求。

  • Flink API 第三层抽象是 Table APITable API 是以表(Table)为中心的声明式编程(DSL)API,例如在流式数据场景下,它可以表示一张正在动态改变的表。Table API 遵循(扩展)关系模型:即表拥有 schema(类似于关系型数据库中的 schema),并且 Table API 也提供了类似于关系模型中的操作,比如 select、project、join、group-by 和 aggregate 等。Table API 程序是以声明的方式定义应执行的逻辑操作,而不是确切地指定程序应该执行的代码。尽管 Table API 使用起来很简洁并且可以由各种类型的用户自定义函数扩展功能,但还是比 Core API 的表达能力差。此外,Table API 程序在执行之前还会使用优化器中的优化规则对用户编写的表达式进行优化。

    表和 DataStream 可以进行无缝切换,Flink 允许用户在编写应用程序时将 Table API 与 DataStream API 混合使用。

  • Flink API 最顶层抽象是 SQL。这层抽象在语义和程序表达式上都类似于 Table API,但是其程序实现都是 SQL 查询表达式。SQL 抽象与 Table API 抽象之间的关联是非常紧密的,并且 SQL 查询语句可以在 Table API 中定义的表上执行。

软件下载

Apache Download Mirrors

SQL

强烈建议阿里云镜像

apache-flink-flink-1.20.0安装包下载_开源镜像站-阿里云

软件安装

一、软件解压

cd /usr/local/soft/

tar -zxvf flink-2.0-preview1-bin-scala_2.12.tgz

二、添加环境变量

vim  /etc/profile

#flink

export FLINK_HOME=/usr/local/soft/flink-2.0

export  PATH=$PATH:$FLINK_HOME/bin

三、修改配置文件

修改/usr/local/soft/flink-2.0/conf/flink-conf.yaml

jobmanager.rpc.address: node11

修改slaves文件

node12

node13

四、远程拷贝

scp -r /usr/local/soft/flink-2.0 root@node12:/usr/local/soft

scp -r /usr/local/soft/flink-2.0 root@node13:/usr/local/soft

scp /etc/profile root@node12:/etc/profile

scp /etc/profile root@node13:/etc/profile

五、集群启动

cd /usr/local/soft/flink-2.0/bin/

./start-cluster.sh

六、集群验证:http://node11:8081

标签:task,Flink,作业,TaskManager,API,集群,Apache,2.0
From: https://blog.csdn.net/taogumo/article/details/145290164

相关文章

  • 至轻云-离线安装CDH6.2.0
    至轻云-离线安装CDH6.2.0前提安装Rancher安装Mysql上传cdh资源需要资源邮箱咨询scp-r/Users/ispong/OneDrive/Downloads/linux/cdh/cdh.zipzhiqingyun@39.100.75.11:/tmpcd/tmpunzipcdh.zipscp-r/Users/ispong/OneDrive/Downloads/docker/cdh-httpd-1.......
  • DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)
    五、数据处理与ETL流程编程实现5.1数据抽取与转换(ETL)在DRG/DIP2.0时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院HIS系统中抽取患者诊疗数据,并对其进行格式转换、字段映射等处理......
  • Android 12.0 系统添加自定义屏保并设置为默认屏保功能实现
    1.前言在12.0的系统rom定制化开发中,在进行相关项目开发的过程中,由于需要在系统锁屏休眠的时候,需要显示相关的背景,就是自定屏保功能,所以就需要添加自定义的屏保,然后在上一篇已经实现在进行锁屏休眠的时候进入屏保的功能,这里就介绍下自定义屏保和设置默认屏保功能就可以了2.......
  • Flink把kafa数据写入Doris的N种方法及对比。
    用Flink+Doris来开发实时数仓,首要解决是如何接入kafka实时流,下面是参考Doris官方文档和代码,在自己项目开发的实践中总结,包括一些容易踩坑的细节。目录RoutineLoad方法 接入kafka实时数据踩坑的问题细节 FlinkDorisConnector方法完整示例RoutineLoad方法如果Dor......
  • 带 `$` 符号的 Redis 密码在 Flink 调度脚本中被截断的解决方案 WRONGPASS invalid us
    在实际生产使用中,如果你的Redis密码中包含$符号,而你又通过调度脚本(如DolphinScheduler)或Shell参数方式传递给Flink,就可能造成密码被部分截断,进而导致:WRONGPASSinvalidusername-passwordpairoruserisdisabled这是因为Shell解释$为变量展开符,后续字符被当作环......
  • Ubuntu 22.04上编译安装C++ libconfig库
    一、前言libconfig是一个C/C++配置文件解析库,支持读取和写入配置文件。它使用了一种简单易懂的语法,非常适合用于各种项目的配置管理。本文将详细介绍如何在Ubuntu22.04上编译和安装libconfig库。二、环境准备在开始编译安装libconfig之前,需要确保系统已经安装了必要的开发工具......
  • Spring MVC:HTTP 请求的参数传递2.0
    本篇博客接上文:SpringMVC:Spring前置知识&HTTP请求的参数传递1.0-CSDN博客目录1.传递json- @RequestBody1.1json1.1.1什么是json1.1.2json的语法1.1.3json和Java中对象的转换1.1.4json优点1.2传递json2.获取路径参数- @PathVariable2.1......
  • Ubuntu22.04上Docker的安装
    在Ubuntu22.04上安装Docker可以帮助您快速构建、测试和部署应用程序。Docker是一个开源的容器化平台,它使开发人员能够将应用程序及其依赖项打包到一个标准化的单元中。本文将详细介绍如何在Ubuntu22.04上安装和配置Docker。一、更新系统首先,确保您的系统软件包是最新的。这有......
  • 火山引擎数据飞轮2.0:聚焦Data+AI,驱动企业数智化转型
    数字化浪潮席卷全球,数据与人工智能的融合正给各行各业带来巨大变革,不仅重塑数据处理流程,更在决策支持、业务优化、产品创新等多个维度上展现巨大的潜力。 近期,火山引擎数智平台技术和产品专家受邀出席DataFun首届“数据与人工智能解决方案大会”,围绕数据飞轮2.0模式,及Data+AI......
  • 30天开发操作系统 第 16 天 -- 多任务 v2.0
    前言大家好!昨天我们已经实践了很多关于多任务的内容,不过今天我们还得继续讲多任务。可“老是讲多任务都听腻了啊!”,但多任务真的非常重要(当然,如果你不想做一个多任务的操作系统那就不重要啦)。从咱们制作的操作系统角度来说,希望大家能够在充分做好多任务机制的基础上,再......