【Flink】Flink核心概念简述

目录

  • 一、Flink 简介
  • 二、Flink 组件栈
    • 1. API & Libraries 层
    • 2. runtime层
    • 3. 物理部署层
  • 三、Flink 集群架构
  • 四、Flink基本编程模型
  • 五、Flink 的部署模式
  • 六、Flink 任务的执行模式
  • 五、Flink 的优点

一、Flink 简介

Apache Flink 的前身是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了Apache Software Foundation的顶级项目之一。2019 年 1 年,阿里巴巴收购了 Flink 的母公司 Data Artisans,并宣布开源内部的 Blink,Blink 是阿里巴巴基于 Flink 优化后的版本,增加了大量的新功能,并在性能和稳定性上进行了各种优化,经历过阿里内部多种复杂业务的挑战和检验。

Flink 是一个分布式的流处理框架,它能够对有界和无界的数据流进行高效的处理。

二、Flink 组件栈

Flink 采用分层的架构设计,从而保证各层在功能和职责上的清晰。如下图所示,由上而下分别是 API & Libraries 层、Runtime 核心层以及物理部署层:

在这里插入图片描述

1. API & Libraries 层

  • API层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API
  • 在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类

这里的API可以进行更具体的划分
在这里插入图片描述
API 的一致性由下至上依次递增,接口的表现能力由下至上依次递减

  • SQL 和 Table API 同时适用于批处理和流处理,这意味着可以对有界数据流和无界数据流以相同的语义进行查询,并产生相同的结果。

  • DataStream 和 DataSet API 是 Flink 数据处理的核心 API,支持使用 Java 语言或 Scala 语言进行调用,提供了数据读取,数据转换和数据输出等一系列常用操作的封装。

  • Stateful Stream Processing 是最低级别的抽象,它通过 Process Function 函数内嵌到 DataStream API 中。 Process Function 是 Flink 提供的最底层 API,具有最大的灵活性,允许开发者对于时间和状态进行细粒度的控制。

2. runtime层

这一层是 Flink 分布式计算框架的核心实现层,包括作业转换,任务调度,资源分配,任务执行等功能,基于这一层的实现,可以在流式引擎下同时运行流处理程序和批处理程序。

3. 物理部署层

Flink 的物理部署层,用于支持在不同平台上部署运行 Flink 应用

Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)

在这里插入图片描述

三、Flink 集群架构

Flink采用标准的 Master - Slave 结构, 其中,Master 部分包含了三个核心组件:Dispatcher、ResourceManager 和 JobManager,而 Slave 则主要是 TaskManager 进程。它们的功能分别如下:

  • JobManager: 负责所有需要中央协调的操作,比如说检查点(checkpoints) 的协调

    • 接收由 Dispatcher 传递过来的执行程序,该执行程序包含了作业图 (JobGraph),逻辑数据流图 (logical dataflow graph) 及其所有的 classes 文件以及第三方类库 (libraries) 等等 。
    • JobManagers 会将 JobGraph 转换为执行图 (ExecutionGraph)
    • 向 ResourceManager 申请资源来执行该任务,一旦申请到资源,就将执行图分发给对应的 TaskManagers 。因此每个作业 (Job) 至少有一个 JobManager;高可用部署下可以有多个 JobManagers,其中一个作为 leader,其余的则处于 standby 状态。
  • TaskManagers:负责实际的子任务 (subtasks) 的执行

    • 每个 TaskManagers 都拥有一定数量的 slots。Slot 是一组固定大小的资源的合集 (如计算能力,存储空间)
    • TaskManagers 启动后,会将其所拥有的 slots 注册到 ResourceManager 上,由 ResourceManager 进行统一管理
    • 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的 TaskManager交换数据
  • ResourceManager :负责管理 slots 并协调集群资源

    • ResourceManager 接收来自 JobManager 的资源请求,并将存在空闲 slots 的 TaskManagers 分配给 JobManager 执行任务
    • Flink 基于不同的部署平台,如 YARN , Mesos,K8s 等提供了不同的资源管理器
    • 当 TaskManagers 没有足够的 slots 来执行任务时,它会向第三方平台发起会话来请求额外的资源。
  • Dispatcher

    • 负责接收客户端提交的执行程序,并传递给 JobManager
    • 提供了一个 WEB UI 界面,用于监控作业的执行情况
    • 在架构中可能并不是必需的,这取决于应用提交运行的方式。
      在这里插入图片描述
      Flink任务 on yarn
      在这里插入图片描述
      在这里插入图片描述

四、Flink基本编程模型

所有的Flink程序都是由三部分组成的: Source 、Transformation 和 Sink

  • Source 负责读取数据源
  • Transformation 利用各种算子进行处理加工
  • Sink 负责输出

每一个dataflow以一个或多个sources开始以一个或多个sinks结束。dataflow 类似于任意的有向无环图(DAG)

下面是一个由Flink程序映射为Streaming Dataflow的示意图:

在这里插入图片描述
转化为并行的数据流时
在这里插入图片描述

五、Flink 的部署模式

前文介绍一共有三种部署模式,分别是部署在本地、集群和云上。其中常见的部署模式是本地和集群,细分为下面三种

  • Local:以单机模式运行,无需启动分布式资源管理器
  • Standalone:作为一个独立的集群运行,独占集群中的资源,不依赖任何外部的资源管理平台,只能运行Flink
  • Flink On Yarn:在yarn之上运行,利用YARN来管理资源分配和任务调度,集群中可运行其他系统

六、Flink 任务的执行模式

  • Session Mode:会话模式

    需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就都已经确定,所有提交的作业会竞争集群中的资源。适合任务规模小,执行时间短的大量作业。

    Flink的作业执行环境会一直保留在集群上,直到会话被显式终止。这样,可以提交多个作业,它们可以共享相同的集群资源和状态,从而实现更高的效率和资源利用。

  • Per-Job Mode:单作业模式

    每个Flink应用程序作为一个独立的作业被提交和执行。每次提交的Flink应用程序都会创建一个独立的作业执行环境,该作业执行环境仅用于执行该特定的作业。当作业完成后,作业执行环境会被释放,集群关闭,资源释放

  • Application Mode:应用模式

    前2种模式中,Flink程序代码是在客户端执行,应用模式中,代码在在集群上执行

在这里插入图片描述

五、Flink 的优点

  • Flink 是基于事件驱动 (Event-driven) 的应用,能够同时支持流处理和批处理
  • 基于内存的计算,能够保证高吞吐和低延迟,具有优越的性能表现
  • 支持精确一次 (Exactly-once) 语意,能够完美地保证一致性和正确性
  • 分层 API ,能够满足各个层次的开发需求
  • 支持高可用配置,支持保存点机制,能够提供安全性和稳定性上的保证
  • 多样化的部署方式,支持本地,远端,云端等多种部署方案
  • 具有横向扩展架构,能够按照用户的需求进行动态扩容
  • 活跃度极高的社区和完善的生态圈的支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/213503.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP地址定位技术为网络安全建设提供全新方案

随着互联网的普及和数字化进程的加速,网络安全问题日益引人关注。网络攻击、数据泄露、欺诈行为等安全威胁层出不穷,对个人隐私、企业机密和社会稳定构成严重威胁。在这样的背景下,IP地址定位技术应运而生,为网络安全建设提供了一…

合并一个文件夹下的多个txt文件,并对文本内容分列处理。

python 合并一个文件夹下的多个txt文件,并对文本内容分列。 原始文件: 最终结果: import pandas as pd import xlwt import pandas as pd from sqlalchemy import create_engine import pandas as pd import os import glob dirPath g…

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台,用户只需要为Agent指定一个名称和目标,就可以在浏览器中链接大型语言模型(如GPT-4)来创建和部署Agent平台。 PS:目前agentGPT仅支持chatgpt模型,暂时不支持本地llm模…

(华为)网络工程师教程笔记(网工教程)网工入门——3、静态路由路由表的配置

参考文章:【全236集】网络工程师从基础入门到进阶必学教程!通俗易懂,2023最新版,学完即可就业!网工入门_华为认证_HCIA_HCIP_数据通信_网工学习路线 文章目录 13. 网工入门10-静态路由(路由表的配置&#x…

【Fastadmin】一个完整的轮播图功能示例

目录 1.效果展示: 列表 添加及编辑页面同 2.建表: 3.使用crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示: 列表 添加及编辑页面同 2.建表: 表名:fa_x…

kubesphere安装后启用DevOps

官方文档:KubeSphere DevOps 系统 1、集群管理---定制资源定义 进入目录:集群管理---定制资源定义搜索:clusterconfiguration 点击 ks-installer 右侧的 ,选择编辑 YAML 在该 YAML 文件中,搜索 devops,…

SSM项目实战-前端-在Index.vue中展示第一页数据

1、util/request.js import axios from "axios";let request axios.create({baseURL: "http://localhost:8080",timeout: 50000 });export default request 2、api/schedule.js import request from "../util/request.js";export let getSchedu…

Python搭建代理IP池实现接口设置与整体调度

目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中,代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制,…

【数据结构和算法】--- 栈

目录 栈的概念及结构栈的实现初始化栈入栈出栈其他一些栈函数 小结栈相关的题目 栈的概念及结构 栈是一种特殊的线性表。相比于链表和顺序表,栈只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的…

iphone/安卓手机如何使用burp抓包

iphone 1. 电脑 ipconfig /all 获取电脑网卡ip: 192.168.31.10 2. 电脑burp上面打开设置,proxy,增加一条 192.168.31.10:8080 3. 4. 手机进入设置 -> Wi-Fi -> 找到HTTP代理选项,选择手动,192.168.31.10:8080 …

AI:95-基于卷积神经网络的艺术品风格分类

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的核心代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新…

一套rk3588 rtsp服务器推流的 github 方案及记录 -01

我不生产代码,我只是代码的搬运工,相信我,看完这个文章你的图片一定能变成流媒体推出去。 诉求:使用opencv拉流,转成bgr数据,需要把处理后的数据(BGR)编码成264,然后推流…

测试Centos上用Gunicorn启动的Django-Web服务在Django源文件有改变的情况下能否自动重载最新源码下的web服务

01-先上传最新的源码文件 参考博文 https://blog.csdn.net/wenhao_ir/article/details/134762966 进行 02-先在Django直接开web服务下修改源码测试 这是没有问题的,会自己重置。 03-开启gunicorn服务 cd /djangoproject/mmdj01/ gunicorn -c /djangoproject/mm…

如何跑AI模型—ultralytics

这里以跑 ultralytics 为示例,记录了如何从 0-1 跑个简单的模型,包括环境搭建。我的是 Window 系统,其他系统也类似。 主要流程是环境搭建,找个官网的 demo,收集好所需素材(模型,图片等&#x…

炫酷不止一面:探索JavaScript动画的奇妙世界(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

口袋参谋:运营必备的生意参谋指数免费转换工具!

​至少99.99%的商家都知道,淘宝天猫上交易的指数越高,宝贝的热度就高,那就代表着入店的流量就会有很多。 01 在哪里可以看到指数呢? 其实我们在生意参谋后台,在市场板块或者竞争板块中,是可以看到访问人气…

智慧能源:数字孪生压缩空气储能管控平台

压缩空气储能在解决可再生能源不稳定性和提供可靠能源供应方面具有重要的优势。压缩空气储能,是指在电网负荷低谷期将电能用于压缩空气,在电网负荷高峰期释放压缩空气推动汽轮机发电的储能方式。通过提高能量转换效率、增加储能密度、快速启动和调节能力…

第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类,用户只要创建这些类的对象,使用相应的方法,即使不具备有关的网络支持,也可 以编写出高质量的网络通信程序…

第二十一章总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机;如图所示: 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,…

JavaScript中的发布订阅和观察者模式:如何优雅地处理事件和数据更新

​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-订阅观察者模式 目录 说说你对发布订阅、观察者模式的理解?…