Flink面试题总结

news2024/7/5 1:28:51

一、简单介绍一下 Flink

 Apache Flink 是一个实时计算框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算

二、Flink集群有哪些角色?各自有什么作用?(flink架构)

--JobManager:
JobManager是Flink集群中的主节点,负责协调和管理整个作业的执行过程
--TaskManager
TaskManager是Flink集群中的工作节点,负责实际执行作业的任务
--ResourceManager
ResourceManager是Flink集群中的资源管理器,负责统一管理和分配集群的计算资源
--Client
Client是Flink程序提交的客户端,Client需要从用户提交的Flink程序配置中获取JobManager的地址,并建立到JobManager的连接,将Flink Job提交给JobManager

三、说说 Flink 资源管理中 Task Slot 的概念

Task Slot是TaskManager中用于执行并行任务的资源单元。
每个TaskManager可以包含多个Task Slot,这些Slot被分配的资源是固定的,用于执行并行的任务或算子。

四、Flink 的常用算子

--Map:
描述:Map算子将输入流(DataStream)中的每一个元素转换为另一个元素。它实现了一对一的映射关系。

--FlatMap:
描述:FlatMap算子将输入流(DataStream)中的每一个元素转换为0个、1个或多个元素。常用于拆分操作。

--Filter:
描述:Filter算子过滤出符合指定条件的元素,只保留返回true的元素。

--KeyBy:
描述:KeyBy算子逻辑上将流拆分为不相交的分区,每个分区包含具有相同key的元素。在内部,它使用哈希函数实现分区。

--Reduce:
描述:Reduce算子对KeyedStream(经过KeyBy操作后的流)中的元素进行聚合计算,最终聚合成一个元素。常用的方法有average、sum、min、max、count等。

--Window 和 WindowAll:
描述:Window和WindowAll算子用于在KeyedStream或DataStream上定义窗口,以便在窗口内对数据进行聚合或其他操作。
示例:计算在最近5秒内到达的数据的总和。

--Union:
描述:Union算子将两个或两个以上的DataStream合并成一个新的DataStream,包含所有DataStream的元素。

--Window Join:
描述:Window Join算子根据给定的key和窗口对两个DataStream进行join操作。

五、Flink中的窗口有那些?

Flink中有四大类窗口,根据时间语意可以细分为八种小窗口。基于事件时间和基于处理时间
--滚动窗口
具有固定大小、不重叠的窗口。
--滑动窗口
具有固定大小、可以滑动的窗口,窗口之间可以有重叠。
--会话窗口
基于时间间隔来定义窗口,当一定时间内没有新的数据到达时,就认为会话结束。
--全局窗口
全局窗口是一个包含所有数据的窗口,通常用于全局聚合操作

六、Flink on yarn部署模式

--1、Session模式(会话模式)
需要事先申请资源,启动JobManager和TaskManager,作业执行完成后,资源不会被释放,会一直占用系统资源
--2、Per-Job模式(单一作业模式)
main函数在客户端执行,如果代码报错在本地可以看到部分错误日志
--3. Application模式(应用模式)
main方法在集群中执行,如果代码报错看不到详细地错误日志

七、Flink中的时间分为哪几类?

--事件时间
事件时间是指数据自身携带的时间戳,代表了数据产生的实际时间,这个时间戳通常是在数据采集设备中产生的.
--处理时间
数据被Flink系统处理时时间,与现实的时间相差不多

八、Flink 中的Watermark是什么概念,起到什么作用?

水位线是Flink中用来衡量事件时间(Event Time)进展的标记,主要内容就是一个时间戳,用来指示最新一条数据的事件时间。

--作用
处理乱序数据和延迟数据

九、Flink是如何支持批流一体的?

Flink提供了DataStream API,这是一个统一的编程模型,用于同时处理无界(流处理)和有界(批处理)数据流。

十、Flink SQL的实现原理是什么?

1、解析器将用户编写的SQL语句解析为抽象语法树(AST)并生成逻辑执行计划
2、逻辑执行计划经过优化器优化后,生成物理执行计划
3、物理执行计划中的节点被转化为对应的算子,并将这些算子组合成一个数据流图(Dataflow Graph)提交到Flink平台执行

 

十一、你了解Flink的容错机制吗?

Flink的容错机制是确保程序在发生故障时能够保证不丢失的关键机制
--检查点
检查点是Flink容错机制的核心Flink会定期地为状态快照,这些快照就是检查点。当发生故障时,Flink可以回滚到上一个检查点,保证数据不丢失。

十二、flink确保至少一次和精确一次

Flink支持两种容错语义:
--至少一次(At Least Once)
这是Flink的默认容错语义。它保证每条数据至少被处理一次,但在某些情况下,可能会因为故障导致数据被重复处理。
--精确一次(Exactly Once)
这需要额外的配置和支持,但它可以确保每条数据只被处理一次,即使在发生故障的情况下也不会丢失或重复处理数据。这通常涉及到在数据源处使用事务性写入,以确保在检查点完成时所有的数据都被正确地写入到外部系统。

十四、如果Flink中的Window出现了数据倾斜,你有什么解决办法?

--重新设计窗口聚合的key
数据倾斜的本质原因之一是数据源头发送的数据量速度不同,导致某些key的数据量过大。重新设计窗口聚合的key,使得数据能够更加均匀地分布到不同的窗口和计算节点中。

--增加并行度
使用setParallelism()方法增加计算节点的并行度,将数据更加均衡地分配到不同的计算节点中进行处理。

--对数据进行分区
使用Flink的rescale()、shuffle()等算子对数据进行分区,将数据分散到不同的计算节点中进行处理。

十五、 Flink任务延迟高,想解决这个问题,你会如何入手?

--分析延迟原因与解决
1、看是否出现资源不足问题,如果有,可以调整参数优化资源配置(增加并行度、合理设置TaskManager slot数量)或者增加集群资源来解决
2、看是否出现数据倾斜问题,如果有,可以重新分区来解决

十六、Flink是如何处理反压的?

--反压
通常发生在实时数据处理过程中,上游节点的生产速度大于下游节点的消费速度时。

--反压处理策略
1、使用缓冲区:使用缓冲区来缓冲数据,当系统处理能力不足时,缓冲区可以暂时存储数据,以避免数据丢失和延迟增加。
2、提高计算资源:增加计算资源,包括增加计算节点、增加CPU和内存等,以提高系统的处理能力。

十七、Flink Job的提交流程

1、Flink作业被编译和提交时,Flink框架会分析代码并构建数据流图(Dataflow Graph),在Spark中,这个图被称为DAG(有向无环图)。
2、Dataflow会被提交到JobManager并被拆分为一个一个的个task
3、这些task会被发送到TaskManager中的TaskSlot执行

十八、Flink中的状态(State)是什么?

状态是处理数据流过程中,用于保存和恢复数据的机制,状态被保存到状态后端中,保证了flink的容错。

 

十九、Flink如何处理数据倾斜

--1 使用分区策略
rebalance()、rescale()、shuffle():这些算子可以帮助将数据均匀分配到不同的计算节点中。例如,rebalance()以轮询方式均匀地分布数据,而shuffle()则将数据随机打乱分配到下游操作。
自定义分区:如果默认分区策略不满足需求,可以调用partitionCustom进行自定义分区,根据数据的实际情况设计分区策略。
--2 增加并行度
setParallelism():通过增加算子的并行度,可以将数据更加均衡地分配到不同的计算节点中。并行度的设置需要根据实际资源和任务需求进行权衡。
--3 使用滑动窗口
滑动窗口可以将窗口划分成多个子窗口,使数据更加均衡地分配到不同的计算节点中,并减少数据倾斜的情况。同时,滑动窗口还可以使窗口内的数据更加连续。
--4 扩大窗口大小
通过扩大窗口大小,可以使窗口内的数据更加均衡地分配到不同的计算节点中,但需要注意过大的窗口大小可能会影响任务的延迟和内存消耗。
--5 两阶段聚合
在keyBy之前使用窗口进行预聚合,减少下游keyBy操作的数据量。这种方法类似于MapReduce中的Combiner思想,但要求聚合操作能够处理多条或一批数据。
--6 加盐
如果数据倾斜的原因是某些key的数据量过大,可以考虑在keyBy()方法中使用随机生成的键来进行分区,从而将数据打散,使数据更加均衡地分配到不同的计算节点中。

二十、你了解Flink的并行度概念吗?

-- 定义
Flink的并行度(Parallelism)是指在Flink作业中同时执行的任务或算子的数量。它决定了作业的并发执行能力和资源利用率。

--并行度的级别
1、作业级别并行度(Job Parallelism):
定义:整个作业中任务的数量,决定了作业的整体并行执行能力。
设置方式:可以在提交作业时通过编程API(如env.setParallelism(int parallelism))或命令行参数进行指定。

2、算子级别并行度(Operator Parallelism):
定义:作业中具体算子的并行度,即该算子被拆分成多少个并行实例(Subtask)来执行。
设置方式:可以通过算子的setParallelism(int parallelism)方法进行设置。

二十一、Flink重启策略

--固定延迟重启策略
作业失败后,延迟一定时间后重启。在达到最大重启次数之前,会不断尝试重启。
--失败率重启策略
作业失败后,基于一定的失败率来决定是否继续重启。如果失败率超过设定阈值,则停止重启。
--无重启策略
作业失败后不进行任何重启尝试,直接标记为失败。
--后备重启策略
当未启用Checkpoint且未明确设置重启策略时,采用的默认策略(实际上通常是无重启策略)。如果启用了Checkpoint但未明确设置重启策略,则默认使用固定延迟重启策略,最大重启次数为Integer.MAX_VALUE。
--指数延迟重启策略
作业失败后,重启延迟时间随着失败次数指数递增。

二十二、你了解哪些flink优化方案

--资源配置调优
1、内存设置
JobManager内存:根据任务数量和并行度合理配置JobManager的内存大小,一般建议2-4GB足够。
内存分配:合理设置TaskManager的Task Slot数量和每个Slot的内存大小,以充分利用集群资源。

2、并行度设置
总并行度:根据集群CPU核数和任务特点设置合适的并行度,一般为CPU核数的2-3倍。
Source端并行度:通常设置为Kafka对应Topic的分区数,以充分利用Kafka的并行读取能力。
Transform端并行度:KeyBy之前的算子并行度可与Source一致;KeyBy之后的算子建议设置为2的整数次幂,如128、256等,以优化数据处理效率。
Sink端并行度:根据Sink端的数据量及下游服务抗压能力设置,若Sink端是Kafka,可设为Kafka对应Topic的分区数。

--性能调优
1、数据倾斜处理
重新设计Key或调整并行度以分散热点数据。
调用Rebalance操作以重新分配数据。
设置缓冲区超时以避免长时间等待。

2、Checkpoint调优
合理配置Checkpoint的间隔时间和存储位置,以减少对正常处理流程的影响。
启用异步Checkpoint模式以提高容错性能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件销毁是一件非常重要的事情分享一下我是如何安全、环保地处理

如何安全有效地销毁文件:一份详尽指南 在信息爆炸的时代,文件的生成、存储与处理已成为日常生活和工作中不可或缺的一部分。然而,随着数据量的激增,如何妥善管理并最终安全销毁不再需要的文件,成为了一个日益重要的议…

sql拉链表

1、定义:维护历史状态以及最新数据的一种表 2、使用场景 1、有一些表的数据量很大,比如一张用户表,大约1亿条记录,50个字段,这种表 2.表中的部分字段会被update更新操作,如用户联系方式,产品的…

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意: 本项目pdf的ocr对于表格、画图文字,水印等干扰没做任何处理,因此希望各位使用该功能的pdf尽量不要含有这些干扰项,以免影响翻译效果。 流程 1.构建…

vue2项目的打包以及部署

打包 当我们写好vue2的项目后,可以通过npm build来对项目进行打包 npm build 打包完成后我们可以看到在当面目录下生成了dis目录,src下的文件都会被打包进这个目录里,当然打包后的文件我们不能直接在浏览器打开,需要进行部署 部署 1.新建一个…

Ubuntu开通5005端口 记录

Ubuntu版本:20.04 使用systemctl status firewalld查看防火墙状态,报错Unit firewalld.service could not be found 报错的原因是没有安装firewall,安装命令为sudo apt install firewalld,然后进行安装 安装完成后输入systemctl…

大数据可视化实验(八):大数据可视化综合实训

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1)Python纵向柱状图实训... 1 2)Python水平柱状图实训... 3 3)Python多数据并列柱状图实训.. 3 4)Python折线图实训... 4 5)Python直方图实训...…

vscode jupyter选择Python环境时找不到我安装的Python

在一些情况下,我们需要自己安装一个Python,在选择内核是可能找不到指定的Python版本, 再次打开内核选择页面就能看到Python环境了 注意先到指定环境下安装依赖包: ./python3 pip install ipykernel notebook jupyter

高考失利咨询复读,银河补习班客服开挂回复

补习班的客服在高考成绩出来后,需要用专业的知识和足够的耐心来回复各种咨询,聊天宝快捷回复软件,帮助客服开挂回复。 ​ 前言 高考成绩出来,几家欢喜几家愁,对于高考失利的学生和家长,找一个靠谱的复读补…

爬虫笔记18——selenium自动加载并存储vip(唯品会)网页数据

爬取唯品会的商品数据信息 整体的流程就是在唯品会首页搜索栏搜索对应的商品,然后跳转到对应商品页面进行数据的爬取、筛选和存储。 其实也有另外一个爬取方案,不用selenium也是可以爬取到相应的数据,通过分析,搜索结果的页面是…

【机器学习】语音转文字 - FunASR 的应用与实践(speech to text)

本文将介绍 FunASR,一个多功能语音识别模型,包括其特点、使用方法以及在实际应用中的表现。我们将通过一个简单的示例来展示如何使用 FunASR 将语音转换为文字,并探讨其在语音识别领域的应用前景。 一、引言 随着人工智能技术的不断发展&am…

如何理解MySql的MVCC机制

MVCC是什么 MySQL的MVCC机制,全称为多版本并发控制(Multi-VersionConcurrency Control),是一种提高数据库并发性能的技术。MVCC的主要目的是在保证数据一致性的同时,提高数据库的并发性能。 它通过为每个读操作创建数…

基于若依(ruoyi-vue)的周报管理系统

喂wangyinlon 填报人页面 审批人 审批不通过,填报人需要重新填写.

【漏洞复现】D-Link NAS 未授权RCE漏洞(CVE-2024-3273)

0x01 产品简介 D-Link 网络存储 (NAS)是中国友讯(D-link)公司的一款统一服务路由器。 0x02 漏洞概述 D-Link NAS nas_sharing.cgi接口存在命令执行漏洞,该漏洞存在于“/cgi-bin/nas_sharing.cgi”脚本中,影响其 HTTP GET 请求处…

Flink实现准确和高效流处理的关键问题

时间相关: Watermark 水位线 水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据。水位线主要的内容是一个时间戳,用来表示当前事件时间的进展。水位线是基于数据的时间戳生成的。水位线的时间戳必须单调递增,以确保任务的事件时间时钟一直向前推进,进展。水位线…

使用Arduino和超声波传感器测量声速

使用Arduino和超声波传感器测量声速 Step 1: 硬件 Arduino Uno单片机超声波传感器(HC-SR04)标尺跳线(母/公)计算器 Step 2: Arduino Uno 微控制器 The Arduino Uno is a credit card size microcontroller board. Arduino Uno是…

信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用

PDF文档公众号回复关键字:20240702 2020 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 1.在内存储器中每个存储单元都被赋予一个唯一的序号,称为( &#xff0…

JavaScript中的Array(数组)对象

目录 一、Array数组对象 1、介绍 2、创建数组对象并赋值 3、访问数组元素 二、Array对象属性 1、constructor属性 2、length属性 3、prototype属性 三、Array对象的常用方法 1、isArray() 2、concat() 3、pop() 4、shift() 5、push() 6、unshift() 7、reverse(…

VQA视觉问答系统

这是一个典型的多模态问题,融合了CV与NLP的技术,计算机需要同时学会理解图像和文字。 Joint embedding 首先,图像和问题分别由CNN和RNN进行第一次编码得到各自的特征,随后共同输入到另一个编码器中得到joint embedding,最后通过解码器输出答案。 值得注意的是,有的工作…

我与C++的爱恋:list的使用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 一、list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代 2.list的底层是双向链表结构,双向链表中…

python: create Envircomnet in Visual Studio Code 创建虚拟机

先配置python开发环境 1.在搜索栏输入“>" 或是用快捷组合键ctrlshiftP键 就会显示”>",再输入"python:" 选择已经安装好的python的版本,选定至当前项目中,都是按回车 就可以看到创建了一个虚拟机的默认的文件夹名".venv" 2 te…