Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述

Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心优点包括:

  1. 低延迟:Flink 可以在毫秒级的时间内处理数据,提供了低延迟的数据处理能力。
  2. 高吞吐:吞吐量巨大。
  3. 分布式计算:Flink 支持分布式计算,它可以在大规模集群上运行,并提供了高可用和容错机制。
  4. 流式数据处理:Flink 基于流式数据处理模型,支持实时数据处理和数据增量更新。
  5. 事件驱动:Flink 的计算引擎是基于事件驱动的,它使用消息传递机制来处理数据。

Flink 的数据处理流程

Flink 的数据处理流程包括以下几个步骤:

  1. 数据输入:Flink 可以从各种数据源中读取数据,如 Kafka、HDFS 等。
  2. 数据转换:Flink 可以使用 DataStream API 或 SQL API 对数据进行转换和处理。
  3. 数据分区:Flink 可以根据数据的属性或规则对数据进行分区,以便在分布式集群上进行处理。
  4. 数据传输:Flink 可以使用网络传输机制将数据传输到其他节点或进程。
  5. 数据输出:Flink 可以将处理后的数据写入到各种数据存储中,如 Kafka、HDFS 等。

Flink架构解析

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

JobManager

类似于司令官,分配工作给干活的士兵(TaskManager),听取士兵的汇报,当士兵失败时做出恢复等反应。
JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager
  • ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的基本单位。
  • Dispatcher
  • Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每一个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
  • JobMaster
  • 1个JobMaster 负责管理1个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
    始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。

TaskManager

TaskManager(也称为 worker):执行JobManager分配过来的任务,并向JobManager汇报。taskManager之间也会交换数据
TaskManager中会有一到多个task slot, task slot是资源调度的最小单位, task slot 的数量表示并发处理task的数量。假设1个task有N个算子,那么执行这个task的slot 就会执行N个算子(直到结束)。

Client

Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。

Task和算子(Operator)

非分布式场景

在这里插入图片描述
假设程序目前需要依次经过以下算子:source->map->keyBy->window->apply->Sink,如果每个算子都用1个线程执行的话,一共有多达6个线程,不仅导致线程间切换、缓冲数据会有不小的开销,还降低了吞吐量。
为降低线程切换、缓冲的开销,Flink会把可以在同一个线程中执行的算子,链在一起,我们管他叫“算子链”。如图有3个算子链:source+map是1个算子链,keyBy+window+apply是1个算子链,sink是一个。每个算子链会由1个Task来执行。
统计下数量:共有3个Task,会占用3个Task Slot执行。
线程数从6缩减成3个,降低了线程间切换、缓冲数据的开销。
把哪些算子“链”在一起,是可以配置的。

分布式场景

[图片]

分布式场景下,工作会有多个taskManager共同完成工作。如图所示,当前并行度为2.
统计下数量:共有5个Task,每个Task会被分配到1个Task Slot上执行,所以会占用5个Slot。
所以Task Slot的数量,决定了可以并行执行多少个Task。

Task Slots 和资源

1个TaskManager下的task slots共享CPU资源,但内存会分开。
1个TaskManager都是一个 JVM 进程,这导致TaskManager下的slot会共享TCP连接和心跳信息。

Task Slot共享解决阻塞问题

继续上面的例子,1个Task被分配到1个Slot中:
[图片]

这样会有1个问题:只有Source\Map拿到数据后,keyBy操作才能开始处理,这会导致keyBy所在算子有可能空闲。
为解决这样一个问题,Flink使用了Slot共享:slot被多个Task共享,如下图:
[图片]

通过Slot共享,将示例中的基本并行度从 2 个增加到 6 个,让每个Slot都可以执行Source算子,这样Source所在的Slot就不会阻塞别的Slot了。这样可以充分利用Slot的资源,同时确保繁重的Task们在 TaskManager 之间公平分配。

小总结:

1. Flink通过将多个算子链在一起,减少了线程之间的切换开销
2. 将任务分配到多个TaskManager上,提高了处理的速度
3. 最后通过Slot共享,确保Slot之间不会阻塞,充分让Slot忙碌起来。

WebUI界面+常见问题排查思路

通过Web UI,可以看到TaskManager、Slot的数量用于速度调优,也可以查看日志用于问题排查。
Flink的Web UI界面的地址是http://localhost:8081,其中localhost是JobManager的主机地址,8081是JobManager的Web UI端口号。在浏览器中输入这个地址,就可以访问Flink的Web UI界面了。

集群概览:查看任务是否正常运行、资源是否需要扩容
[图片]

点击1个Job查看Job详情:
在这里插入图片描述

点击1个算子查看算子详情:查看数据倾斜、反压等性能问题
[图片]

TaskManager:可以查看TaskManager的日志排查问题,注意蛋疼的是问题不一定出现在哪个TaskManager上。
[图片]

JobManager:
[图片]

Flink 的容错机制

Flink 的容错机制是通过 Checkpointing 实现的。Checkpointing 允许用户在处理流式数据时定期保存状态,以便在出现故障时恢复状态。Flink 的容错机制包括以下几个步骤:

  1. 定义 Checkpointing 策略:用户需要定义 Checkpointing 的频率和保存状态的位置。
  2. 触发 Checkpointing:在处理数据时,Flink 会根据定义的 Checkpointing 策略触发 Checkpointing。
  3. 恢复状态:在出现故障时,Flink 会根据保存的 Checkpointing 恢复状态。

Flink 的应用场景

Flink 可以应用于多种场景,如:

  1. 实时数据处理:Flink 可以用于实时数据处理,如实时监控、实时分析等。
  2. 数据清洗:Flink 可以用于数据清洗,如数据去重、数据清洗等。
  3. 数据分析:Flink 可以用于数据分析,如数据统计、数据挖掘等。
  4. 数据集成:Flink 可以用于数据集成,如数据同步、数据迁移等。

Flink常见算子

Flink 的常见算子包括:

  1. Source:从上游收集数据
  2. Sink:发送数据给下游
  3. Map:对输入数据进行转换操作,如数据清洗、数据格式化等。
  4. FlatMap:对输入数据进行扁平化操作,将一个数据项转换为多个数据项。
  5. Filter:对输入数据进行筛选操作,只保留符合条件的数据项。
  6. KeyBy:对输入数据进行分组操作,根据指定的键对数据进行分组。
  7. Reduce:对输入数据进行聚合操作,将多个数据项聚合为一个数据项。
  8. Window:对输入数据进行窗口操作,将数据按照指定的窗口大小进行分组。
  9. Union:对多个输入数据进行合并操作,将多个数据集合并为一个数据集。
  10. Split:对输入数据进行分裂操作,将一个数据集分裂为多个数据集。
  11. Join:对多个输入数据进行连接操作,将多个数据集按照指定的键进行连接。
  12. SQL:对输入数据进行 SQL 查询操作,使用 SQL 语句对数据进行查询和分析。
    这些算子可以组合使用,以实现更复杂的数据处理逻辑。

总结

Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心特点包括流式数据处理、事件驱动、分布式计算、低延迟等。Flink 的核心组件包括 DataStream API、SQL API、Stateful Stream Processing、Checkpointing 等。Flink 的数据处理流程包括数据输入、数据转换、数据分区、数据传输、数据输出等。Flink 的状态管理是通过 Stateful Stream Processing 实现的,它允许用户在处理流式数据时维护状态。Flink 的容错机制是通过 Checkpointing 实现的,它允许用户在处理流式数据时定期保存状态,以便在出现故障时恢复状态。Flink 可以应用于多种场景,如实时数据处理、数据清洗、数据分析、数据集成等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

7款炫酷的前端动画特效分享(二)(附效果图及在线演示)

分享7款好玩的前端动画特效 其中有CSS动画、SVG动画、js小游戏等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 jQuery拉开帷幕特效 基于jQuery实现的帷幕特效 点击右侧拉条 可以实现帷幕的收起也展开 非常的炫酷…

协议和序列化反序列化

“协议”和序列化反序列化 “协议”的概念: “协议”本身是一种约定俗成的东西,由通讯双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容 我们把这个规矩叫做“…

【论文阅读】基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪

Bubble recognizing and tracking in a plate heat exchanger by using image processing and convolutional neural network 基于图像处理和卷积神经网络的板式换热器气泡识别与跟踪 期刊信息:International Journal of Multiphase Flow 2021 期刊级别:…

02-Vue 计算属性与监听器与VUE-cli使用

1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

C++从入门到实践要掌握的20个的代码案例及入门技巧

文章目录 C从入门到实践要掌握的20个的代码案例C从入门到实践&#xff0c;开发者需要掌握的基础知识和技能可以分为以下几个阶段&#xff1a;初级阶段&#xff1a;中级阶段&#xff1a;高级阶段&#xff1a; C快速入门技巧&#xff1a; C从入门到实践要掌握的20个的代码案例 C…

vSphere资源管理

一 内存、CPU、资源池和vApp 内存部分&#xff1a; 关联VM内存 我们可以超额的关联内存给VM。例如&#xff1a;ESXI物理主机内存只有8G&#xff0c;但我们可以给三个VM都分配4G内存。 2.ESXI四大高级内存控制技术 a.Page sharing&#xff08;透明的页面共享&#xff09; 虚…

鸿蒙Harmony应用开发—ArkTS声明式开发(自定义事件分发)

ArkUI在处理触屏事件时&#xff0c;会在触屏事件触发前进行按压点和组件区域的触摸测试&#xff0c;来收集需要响应触屏事件的组件&#xff0c;再基于触摸测试结果分发相应的触屏事件。在父节点&#xff0c;开发者可以通过onChildTouchTest决定如何让子节点去做触摸测试&#x…

iclone空白处粘贴帧是否归集到前面的clip的关键开关

1假设走到这里了我想给他一个停止站立的姿势即把最开始的站立姿势给他让他自动过渡&#xff08;想的美&#xff0c;其实此路不通&#xff0c;因归集的pose方位不会随前一个clip末帧因此过程只会滑动或滑转过去&#xff0c;不适合脚步行走的生物&#xff0c;详见下面的实例&…

【Git学习笔记】提交PR

step1 克隆一个仓库 git clone .....step2 创建一个分支 (Creating a branch) # 创建并切换到本地新分支&#xff0c;分支的命名尽量简洁&#xff0c;并与解决的问题相关 git checkout -b delete-unused-linkstep3 做出修改 (Make changes) step4 提交修改 # 保存本地修…

Android ANR 日志分析定位

ANR 是 Android 应用程序中的 "Application Not Responding" 的缩写&#xff0c;中文意思是 "应用程序无响应"。这是当应用程序在 Android 系统上运行时&#xff0c;由于某种原因不能及时响应用户输入事件或执行一个操作&#xff0c;导致界面无法更新&…

基于springboot+vue的在线考试系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能页面 三、论文 前言 现在我国关于在线考试系统的发展以及专注于对无纸化考试的完善程度普遍不高&#xff0c;关于对考试的模式还大部分还停留在纸介质使用的基础上&#xff0c;这种教学模式已不能解决现在的时代所产生的考试…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

NCDA设计大赛获奖作品剖析:UI设计如何脱颖而出?

第十二届大赛简介 - 未来设计师全国高校数字艺术设计大赛&#xff08;NCDA&#xff09;开始啦&#xff01;视觉传达设计命题之一: ui 设计&#xff0c;你想知道的都在这里。为了让大家更好的参加这次比赛&#xff0c;本文特别为大家整理了以往NCDA大赛 UI 设计的优秀获奖作品&a…

【服务发现--service】

1、service的定义 "Service"简写"svc”。Pod不能直接提供给外网访问&#xff0c;而是应该使用service。Service就是把Pod暴露出来提供服务&#xff0c;Service才是真正的“服务”&#xff0c;它的中文名就叫“服务”。可以说Service是一个应用服务的抽象&#…

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

【前端素材】推荐优质后台管理系统网页my-Task平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使用。后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功…

vulhub中JBoss 5.x/6.x 反序列化漏洞复现(CVE-2017-12149)

该漏洞为 Java反序列化错误类型&#xff0c;存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化&#xff0c;从而导致了漏洞。 漏洞复现 利用攻击进行漏洞利用yunxu1/jboss-_…

Tuning Language Models by Proxy

1、写作动机&#xff1a; 调整大语言模型已经变得越来越耗资源&#xff0c;或者在模型权重是私有的情况下是不可能的。作者引入了代理微调&#xff0c;这是一种轻量级的解码时算法&#xff0c;它在黑盒 大语言模型 之上运行&#xff0c;以达到直接微调模型的结果&#xff0c;但…

Postman: 前端必备工具还是后端独享利器

Postman 的使用场景&#xff1a;适用于前端和后端 Postman 是一个流行的 API 测试与开发工具。它被广泛地应用在前后端开发的过程中&#xff0c;但是很多人对于它的使用场景存在疑惑。那么&#xff0c;到底是前端用还是后端用呢&#xff1f;本文将从多个角度详细解答这个问题。…