当前位置: 首页 > news >正文

Flink面试题总结

一、简单介绍一下 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模式以提高容错性能。

相关文章:

Flink面试题总结

一、简单介绍一下 Flink Apache Flink 是一个实时计算框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算 二、Flink集群有哪些角色?各自有什么作用?(flink架构) --JobManager: JobManag…...

人工智能与云计算

项目要求 一个简单的集群。您需要在此项目中创建计算机集群。这些机器是 docker 容器。集群管理器是一个 Python 程序。群集的状态将写入文件。 希望通过这个 Python 文件,首先它能够通过获取输入来得到要创建的集群中包含的容器数量,并与用户进行交互(用户可以执行此集群…...

9.(vue3.x+vite)修改el-input,el-data-picker样式

效果预览 二:相关代码 <template><div style="padding: 50px"><el-input placeholder="请输入模型名称" style="width: 260px" /><br /...

java反射和注解

反射 获取class对象的三种方法 ①&#xff1a;Class.forName("全类名"); ②&#xff1a;类名.class ③&#xff1a;对象.getclass(); 代码样例 package com.ithema;public class Main {public static void main(String[] args) throws ClassNotFoundException {//第…...

react_后台管理_项目

目录 1.运行项目 2. 项目结构 ①项目顶部导航栏 ②项目左侧导航栏 ③主页面-路由切换区 本项目使用的是 reacttsscss 技术栈。 1.运行项目 在当前页面顶部下载本项目&#xff0c;解压后使用编辑器打开&#xff0c;然后再终端输入命令&#xff1a; npm i 下载依赖后&am…...

【C语言】使用C语言编写并使用gcc编译动态链接库

【C语言】使用C 语言编写并使用 gcc 编译动态链接库 1.背景2.使用C编写代码3.使用gcc编译代码1.背景 在windows下开发很多程序接口被封装到动态链接库供其它开发者使用。 本博客使用C语言编写并使用gcc 编译 一个动态链接库文件FpdSys.dll; 然后使用C/C++/C#/Python去调用动态…...

使用supportFragmentManager管理多个fragment切换

android studio创建的项目就没有一个简单点的框架&#xff0c;生成的代码都是繁琐而复杂&#xff0c;并且不实用。 国内的页面一般都是TAB页面的比较多&#xff0c;老外更喜欢侧边菜单。 如果我们使用一个activity来创建程序&#xff0c;来用占位符管理多个fragment切换&…...

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(六)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…...

独立开发者系列(17)——MYSQL的常见异常整理

虽然安装MYSQL到本地很简单&#xff0c;但是数据库报错还是经常出现&#xff0c;这个时候&#xff0c;需要我们进行逐步检查与修复。作为我们最常用的开发软件&#xff0c;无论切换php/go/python/node/java&#xff0c;数据库的身影都少不了&#xff0c;对于我们储存数据而言&a…...

【ajax实战02】数据管理网站—验证码登录

一&#xff1a;数据提交&#xff08;提交手机验证码&#xff09; 核心思路整理 利用form-serialize插件&#xff0c;收集对象形式的表单数据后&#xff0c;一并提交给服务器。后得到返回值&#xff0c;进一步操作 基地址&#xff1a; axios.defaults.baseURL http://geek.…...

人工智能在反无人机中的应用介绍

人工智能技术在无人机的发展中扮演着至关重要的角色&#xff0c;这一作用在反无人机技术领域同样显著。随着无人机技术的发展&#xff0c;飞行器具备了微小尺寸、高速机动性&#xff0c;以及可能采用的隐蔽或低空飞行轨迹等特性。这些特性使得传统的人工监视和控制手段面临着重…...

【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现

原题链接 题目描述 给你一个整数数组 nums。 返回两个&#xff08;不一定不同的&#xff09;质数在 nums 中 下标 的 最大距离。 示例 1&#xff1a; 输入&#xff1a; nums [4,2,9,5,3] 输出&#xff1a; 3 解释&#xff1a; nums[1]、nums[3] 和 nums[4] 是质数。因此答…...

【Gin】项目搭建 一

环境准备 首先确保自己电脑安装了Golang 开始项目 1、初始化项目 mkdir gin-hello; # 创建文件夹 cd gin-hello; # 需要到刚创建的文件夹里操作 go mod init goserver; # 初始化项目&#xff0c;项目名称&#xff1a;goserver go get -u github.com/gin-gonic/gin; # 下载…...

C++ 和C#的差别

首先把眼睛瞪大&#xff0c;然后憋住一口气&#xff0c;读下去&#xff1a; 1、CPP 就是C plus plus的缩写&#xff0c;中国大陆的程序员圈子中通常被读做"C加加"&#xff0c;而西方的程序员通常读做"C plus plus"&#xff0c;它是一种使用非常广泛的计算…...

Vue2组件传值(通信)的方式

目录 1.父传后代 ( 后代拿到了父的数据 )1. 父组件引入子组件&#xff0c;绑定数据2. 子组件直接使用父组件的数据3. 依赖注入(使用 provide/inject API)1.在祖先组件中使用 provide2.在后代组件中使用 inject 2.后代传父 &#xff08;父拿到了后代的数据&#xff09;1. 子组件…...

【数据结构 - 时间复杂度和空间复杂度】

文章目录 <center>时间复杂度和空间复杂度算法的复杂度时间复杂度大O的渐进表示法常见时间复杂度计算举例 空间复杂度实例 时间复杂度和空间复杂度 算法的复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&…...

telegram支付

今天开始接入telegram支付,参考教程这个是telegram的官方说明,详细介绍了机器人支付API。 文章公开地址 新建机器人 因为支付是一个单独的系统,所以在做支付的时候单独创建了一个bot,没有用之前的bot了,特意这样将其分开。创建bot的方法和之前不变,这里不过多介绍。 获…...

elasticsearch-6.8.23的集群搭建过程

三个节点的 ElasticSearch 集群搭建步骤 准备三台机器&#xff1a;28.104.87.98、28.104.87.100、28.104.87.101 和 ElasticSearch 的安装包 elasticsearch-6.8.23.tar.gz ----------------------------- 28.104.87.98&#xff0c;使用 root 用户操作 ----------------------…...

javascript输出语法

javascript输出有三种方式 一种是弹窗输出&#xff0c;就是网页弹出一个对话框&#xff0c;弹出输出内容 语法是aler(内容) 示例代码如下 <body> <script> alert(你好); </script> </body> 这段代码运行后网页会出现一个对话框&#xff0c;弹出你…...

仓库管理系统26--权限设置

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、权限概述 在应用软件中&#xff0c;通常将软件的功能分为若干个子程序&#xff0c;通过主程序调用。那么&#xff0c;通过…...

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程

在使用计算机中&#xff0c;如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办&#xff1f;这个是非常常见问题&#xff0c;下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法&#xff01; 一、d3dx9…...

[C++] 退出清理函数解读(exit、_exit、abort、atexit)

说明&#xff1a;在C中&#xff0c;exit、_exit&#xff08;或_Exit&#xff09;、abort和atexit是用于控制程序退出和清理的标准库函数。下面是对这些函数的详细解读&#xff1a; exit 函数原型&#xff1a;void exit(int status);作用&#xff1a;exit函数用于正常退出程序…...

代码随想录(回溯)

组合&#xff08;Leetcode77&#xff09; 思路 用递归每次遍历从1-n得数&#xff0c;然后list来记录是不是组合到k个了&#xff0c;然后这个每次for循环的开始不能和上一个值的开始重复&#xff0c;所以设置个遍历开始索引startindex class Solution {static List<List<…...

编译原理1

NFA&DFA 在正规式的等价证明可以借助正规集&#xff0c;也可以通过有限自动机DFA来证明等价&#xff0c;以下例题是针对DFA证明正规式的等价&#xff0c;主要步骤是①NFA&#xff1b;②状态转换表&#xff1b; ③状态转换矩阵&#xff1b; ④化简DFA&#xff1b; 文法和语…...

【信息系统项目管理师知识点速记】组织通用管理:流程管理

23.2 流程管理 通过流程视角能够真正看清楚组织系统的本质与内在联系,理顺流程能够理顺整个组织系统。流程是组织运行体系的框架基础,流程框架的质量影响和决定了整个组织运行体系的质量。把流程作为组织运行体系的主线,配备满足流程运作需要的资源,并构建与流程框架相匹配…...

前端 JS 经典:箭头函数的意义

箭头函数是为了消除函数的二义性。 1. 二义性 函数的二义性指函数有不同的两种用法&#xff0c;就造成了二义性&#xff0c;函数的两种用法&#xff1a;1. 指令序列。2. 构造器 1.1 指令序列 就是调用函数&#xff0c;相当于将函数内部的代码再从头执行一次。 1.2 构造器 …...

Java List操作详解及常用方法

Java List操作详解及常用方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是Java List&#xff1f; Java中的List是一种动态数组&#xff0c;它允许存…...

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…...

数据库-MySQL 实战项目——书店图书进销存管理系统数据库设计与实现(附源码)

一、前言 该项目非常适合MySQL入门学习的小伙伴&#xff0c;博主提供了源码、数据和一些查询语句&#xff0c;供大家学习和参考&#xff0c;代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具&#xff1a;navicat&#xff1b; 数据库&#xff1a;MySq…...

eNSP中WLAN的配置和使用

一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…...