Flink面试题

0. 思维导图

在这里插入图片描述

1. 简单介绍一下Flink♥♥

  Flink是一个分布式的计算框架,主要用于对有界和无界数据流进行有状态计算,其中有界数据流就是值离线数据,有明确的开始和结束时间,无界数据流就是指实时数据,源源不断没有界限,有状态计算指的是在在进行当前数据计算的时候,我们可以使用之前数据计算的结果。Flink还有一个优点就是提供了很多高级的API,比如DataSet API、DataStream API、Table API和FlinkSQL。Flink的主要特点大概就是这些!

2. Flink和SparkStreaming区别♥

  我觉得他们区别还是挺大的,其中最大的三点如下:

  1. 计算速度的不同,Flink是真正的实时计算框架,而sparkStreaming是一个准实时微批次的计算框架,也就是说,sparkSteaming的实时性比起Flink差一些。
  2. 架构模型不同,SparkStreaming在运行时的主要角色包括:Driver、Executor,而Flink在运行时主要包含:JobManager、TaskManager。
  3. 时间机制不同,sparkStreaming只支持处理时间,而Flink支持的时间语义包括处理时间、事件事件、注入时间,并且还提供了watermark机制来处理迟到数据。

3. Flink的重启策略你了解吗

  重启策略就是说job失败之后如何重启,Flink支持不同的重启策略,包括固定延迟重启策略、失败率重启策略、无重启策略。
  我是在使用检查点的时候,遇到过Flink重启的问题,我设置了检查点,但是实际上有一个地方会抛出异常,但是程序始终不抛出异常,并且一直输出异常之前的输出语句,这个时候就是因为Flink在开启checkpoint的情况下,重启策略会自动进行重启。

4. Flink的运行依赖于hadoop组件吗

  Flink可以完全独立于Hadoop,在不依赖Hadoop组件下运行。但是在实际的大数据应该场景下,Hadoop体系是任何大数据框架都绕不过去的。Flink可以和Yarn集成做资源调度,也可以读写HDFS,或者利用HDFS做检查点。
&emsp’ 总结一句话:可以但是没必要。

5. Flink集群中有哪些角色?各自有什么作用♥

slot:每一个taskmanager都包含一定数量的slot,指taskmanager具有的并行执行能力(静态概念)
并行度:taskmanager运行程序的时候实际使用的并行能力(动态概念)

  • jobmanager:相当于一个集群的Master,是整个为集群的协调者,负责接收job。
  • taskmanager:负责实际执行计算的Worker
  • client:它是Flink程序提交的客户端,当用户提交一个Flink程序时,会首先创建一个Client。

6. 简述Flink运行流程(基于Yarn)♥♥

  首先Flink的客户端将作业提交给Yarn的RM,然后RM会分配container,并且选择合适的NM启动ApplicationMaster,然后AM启动jobmanager向RM申请资源启动taskManager,然后jobManager就可以分配任务给taskManager。

7. max算子和 maxBy算子的区别♥

  这两个算子都是基于KeyedStream求最大值。不同点如下:

  • max: 将原来的数据的该字段替换为最大值,然后返回该记录,返回的数据不是原来的数据。
  • maxBy:会把该字段最大的整条记录全部返回,返回的数据还是原来的数据。

8. Connect算子和Union算子的区别♥

  他们之间的主要区别如下:

  1. union算子的两个流类型必须是一样的,而connect算子的两个流类型可以不一样。
  2. union算子可以连接多个流,而connect算子只能连接两个流。

9. Flink的时间语义有哪几种♥♥♥

  1. event time: 表示事件创建的时间,通常由事件中的时间戳描述。
  2. ingestion time: 表示数据进入Flink的时间。
  3. processing time: 表示执行算子的本地系统时间。
  4. 总结一句话:在Flink的流式处理中,绝大部分的业务都会使用eventTime。

10. 谈一谈你对watermark的理解♥♥♥

  只有考虑事件时间语义,才会发生乱序(到达窗口的事件先后顺序和事件的事件先后顺序不一致)
  我先说一下watermark是什么,它就是一种特殊的时间戳,作用就是为了让事件事件慢一点,等迟到的数据都到了,才触发窗口计算。我举个例子说一下为什么会出现watermark?
  比如现在开了一个5s的窗口,但是2s的数据在5s数据之后到来,那么5s的数据来了,是否要关闭窗口呢?可想而知,关了的话,2s的数据就丢失了,如果不关的话,我们应该等多久呢?所以需要有一个机制来保证一个特定的时间后,关闭窗口,这个机制就是watermark

  什么是watermark呢?

  • 我的理解是,watermark是一种特殊的时间戳,等于直到当前事件发现的最大事件事件减去设定延迟的时间assignTimestampsWithWatermarks
  • 它的作用说简单点,就是让事件时间慢一点,等到迟到的数据都到了,才去触发窗口计算。
  • 当watermark等于窗口时间的时候,就会触发计算。

11. Flink对于迟到或者乱序数据是怎么处理的♥♥♥

  • watermark设置延迟时间
  • window的allowedLateness方法,可以设置窗口允许处理迟到数据的时间
  • window的sideOutputLateData方法,可以将迟到的数据写入侧输出流

12. Flink中,有哪几种类型的状态,你知道状态后端吗♥♥

  主要有两种类型的状态,包括operator state 和keyed state,operator state 和 key无关,而keyed state和key有关。

  • operator state【算子状态】:该类型的状态,对于同一个任务而言,是共享的
  • keyed state【键控状态】:每一个key都会保存一个状态

  状态后端就是用来保存状态的东西,状态可以理解为一个本地变量。Flink的状态在底层是如何保存的呢?因此需要一个人东西来进行状态的存储、访问和维护,这个东西就是状态后端。分为以下三种:

  1. MemoryStateBackend:内存级的状态后端,会将状态作为内存中的对象进行管理,将他们存储在TaskManager的JVM堆上。而将checkpoint存储在JobManager的内存中。
  2. FsStateBackend:将checkpoint存到远程的持久化文件系统上。而对于本地状态,跟MemoryStateBackend一样,也会存在TaskManager的JVM堆上。
  3. RocksDBStateBackend:将所有状态序列化后,存入本地的RocksDB中存储。

13. Flink是如何做容错的?

  Flink实现容错主要靠强大的checkpoint机制和State机制。Checkpoint负责定时制作分布式快照、对程序中的状态进行备份;State用来存储计算过程中的中间状态。

state 和 checkpoint之间的区别如下:

  • state存储的是某一个操作的运行状态或者历史值,维护在内存中。
  • checkpoint存储的是某一时刻所有操作的当前状态的快照,存在于磁盘中。

14. Flink是如何保证Exactly-once语义的♥♥♥

  • at-most-once: 什么都不干,既不恢复丢失的状态,也不重播丢失的数据。
  • at-least-once:一些事件可能被处理多次
  • exactly-once:没有事件丢失,并且对于每一个事件,有且仅有处理一次。

整个端到端的一致性级别取决于所有组件中一致性最弱的组件
端到端的一致性包括如下:

  • 内部保证:依赖checkpoint
  • source端:需要外部源可重置偏移量
  • sink端:需要保存从故障恢复时,数据不会重复写入外部系统
    • 幂等性写入:同一份数据无论写入多少次,只保证一份结果
    • 事务性写入:
      • 两种实现方式:WAL和2PC
      • WAL(预写日志):把结果数据先写入log文件中,然后在收到checkpoint完成的通知时,一次性写入sink系统。
      • 2PC(两阶段提交):对于每个checkpoint,sink任务会启动一个事务,并将接下来所有接收的数据添加到事务里;然后将这些数据写入外部sink系统,但不提交他们(这时只是预提交);当收到checkpoint完成的通知时,它才正式提交事务,实现结果的真正写入。

如何确保精准一次性呢?

  • 使用checkpoint检查点,其实就是所有任务的状态,在某个时间点的一份快照;这个时间点,应该时所有任务都恰好处理完一个相同的输入数据的时候。

  • checkpoint的步骤:

    1. Flink应用在启动的时候,Flink的jobManager创建CheckPointCoordinator
    2. CheckpointCoodinator(检查点协调器)周期性的向该流应用的所有source算子发送barrier(屏障)
    3. 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储(hdfs)中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理。
    4. 下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自己的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身快照情况,同时向自身所有下游算子广播该barrier,恢复数据处理。
    5. 每个算子按照上面这个操作不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。
    6. 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功;否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败。
  • 检查点的保存

    1. 在Flink中,检查点的保存时周期性触发的,间隔时间可以进行设置
    2. 当所有任务都恰好处理完一个相同的输入数据的时候,将它们的状态保存下来
  • checkpoint 和 savepoint的区别:

    1. 目的: checkpoint重点时在于自动容错,savepoint重点在于手动备份、恢复暂停作用
    2. 触发者:checkpoint是Flink自动触发,而savepoint是用户主动触发
    3. 状态文件保存:checkpoint一般会自动删除;savepoint一般都会保留下来,除非用户去做相应的删除操作。

15. Flink是如何处理反压的

  Flink内部是基于producer-consumer模型来进行消息传递的,Flink的反压设计也是基于这个模型。Flink使用了高效有界的分布式阻塞队列,就像java通用的阻塞队列(BlockingQuequ)一样。下游消费者消费变慢,上游就会收到阻塞。

16. Flink是如何支持批流一体的♥

  Flink使用一个引擎就支持了DataSetAPI和DataStream API。其中DataSet API 用来处理有界流,DataStream API 既可以处理有界流又可以处理无界流,这样就实现了流批一体。

17. 你用过Flink CEP吗,简单介绍一下♥

  • 说一下我的理解,CEP就是用来从无界流中得到满足一定规则的复杂事件。
  • 我之前在做用户行为分析的时候,做过一个需求:如果有用户5s内连续登录3次,就报警输出该用户:
    • 使用CEP编程特别简单,首先定义一个匹配模式(begin where next where within),调用Pattern中的方法,然后将匹配模式应用到数据流上,调用CEP.pattern方法,最后检测出符合匹配条件的复杂事件,进行转换处理,输出报警信息。

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

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

相关文章

【c语言】详解操作符(上)

1. 操作符的分类 2. 原码、反码、补码 整数的2进制表示方法有三种,即原码、反码、补码 有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位其余都是数值位。 符号位都是用0表示“正”,用…

JavaScript高级:闭包

1 概念 一个函数对周围状态的引用,捆绑在一起,内层函数中可以访问到外层函数的作用域。 简单理解:闭包 内层函数 外层函数的变量 先看个简单的代码: function outer() {let a 1function inner() {console.log(a)} } outer(…

Mysql-日志介绍 日志配置

环境部署 docker run -d -p 3306:3306 --privilegedtrue -v $(pwd)/logs:/var/lib/logs -v $(pwd)/conf:/etc/mysql/conf.d -v $(pwd)/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD654321 --name mysql mysql:5.7运行指令的目录下新建好这些文件: 日志类型 日…

顶顶通呼叫中心中间件机器人压力测试配置(mod_cti基于FreeSWITCH)

介绍 顶顶通呼叫中心中间件机器人压力测试(mod_cit基于FreeSWITCH) 一、配置acl.conf 打开ccadmin-》点击配置文件-》点击acl.conf-》我这里是已经配置好了的,这里的192.168.31.145是我自己的内网IP,你们还需要自行修改 二、配置线路 打开ccadmin-&g…

mac/macos上编译electron源码

官方教程:Build Instructions | Electron 准备工作这里不写了,参考官方文档,还有上一篇windows编译electron electron源码下载及编译-CSDN博客 差不多步骤,直接来 网络记得使用魔法 下载编译步骤 0. 选择目录很重要&#xff0…

Mac网线上网绿联扩展坞连接网线直接上网-无脑操作

声明:博主使用的绿联扩展坞 以下为绿联扩展坞Mac网线使用方法 1.首先需要下载电脑对应版本的驱动 直接点击即可下载 2. 下载好以后 解压 点进去 对应版本 博主直接使用最新的12-14 3. 安装包好了以后 会提示重启电脑 此时拔掉扩展坞 再重启动 拔掉扩展坞 再重启…

HttpHeaders 源码中headers成员变量为什么声明为final

源码如下 public class HttpHeaders implements MultiValueMap<String, String>, Serializable {private final Map<String, List<String>> headers;public String getFirst(String headerName) {List<String> headerValues (List)this.headers.get(…

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布&#xff0c;这是微软公司2024年发行的的最…

Android App开发基础(1)—— App的开发特点

本文介绍基于Android系统的App开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计是如何运作实现的&#xff0c;App的活动页面是如何创建又是如何跳转…

TensorFlow2实战-系列教程3:猫狗识别1

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、项目介绍 基本流程&#xff1a; 数据预处理&#xff1a;图像数据处理&#xff0c…

Web3:B站chainlink课程Lesson5遇到的小坑汇总

ethers代码 我用的ethers.js 6 &#xff0c;和视频里一样用的是5的不用看代码部分 ethers.providers.JsonRpcProvider("server") //无了 ethers.JsonRpcProvider("server") //现在的wallet.getTransactionCount() //无了 wallet.getNonce() //现在的Big…

已解决:安卓,怎么优雅接入科大讯飞语音评测功能?

写在前面&#xff1a; 网上关于讯飞接入的博客都很少&#xff0c;按说讯飞都是业界翘楚&#xff0c;不知为何&#xff0c;很少搜索到精品&#xff0c;一搜就是一个要求开会员的博客&#xff0c;我也是醉了。讯飞提供的文档也是不清晰&#xff0c;我是摸着石头过河&#xff0c;…

java集合ArrayList和HashSet的fail-fast与fail-safe以及ConcurrentModificationException

在 java 的集合工具类中&#xff0c;例如对 ArrayList 或者 HashSet 进行删除元素后再遍历元素时&#xff0c;会抛出 ConcurrentModificationException 异常。 fail-fast ArrayList public class TestList {public static void main(String[] args) {ArrayList<Integer>…

【iOS ARKit】BlendShapes

BlendShapes 基础介绍 利用前置摄像头采集到的用户面部表情特征&#xff0c;ARKit 提供了一种更加抽象的表示面部表情的方式&#xff0c;这种表示方式叫作 BlendShapes,BlendShapes 可以翻译成形状融合&#xff0c;在3ds Max 中也叫变形器&#xff0c;这个概念原本用于描述通过…

Ubuntu18编译jdk8源码

环境 系统 ubuntu18 Linux ubuntu 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux jdk源码openjdk-8u41-src-b04-14_jan_2020.zip bootJdk jdk-8u391-linux-x64.tar.gz ps -e|grep ssh sudo apt-get install ssh…

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法(LSBoost、Bag)含自动优化超参数和特征敏感性分析功能

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法&#xff08;LSBoost、Bag&#xff09;含自动优化超参数和特征敏感性分析功能 本文展示多种非常用多输入单输出回归预测模型效果。 注&#xff1a;每次运行数据训练集测试集为随机&#xff0c;故对比不严谨&…

京东广告算法架构体系建设--在线模型系统分布式异构计算演变 | 京东零售广告技术团队

一、现状介绍 算法策略在广告行业中起着重要的作用&#xff0c;它可以帮助广告主和广告平台更好地理解用户行为和兴趣&#xff0c;从而优化广告投放策略&#xff0c;提高广告点击率和转化率。模型系统作为承载算法策略的载体&#xff0c;目前承载搜索、推荐、首焦、站外等众多广…

Word插入音乐视频文件快速方法 exe zip doc apk txt pdf bat等

需求&#xff1a; Word插入文件有哪些极限操作&#xff1f;如何快速插入音乐视频等文件 问题解决&#xff1a; 使用拖动进行文件快速插入&#xff08;PPT Excle 同理&#xff09; 操作 1.让文件和word界面处于同一屏幕&#xff0c;可以使用分屏 2.鼠标选中文件左键或者使用笔…

一些反序列化总结

1 反序列化漏洞原理 如果反序列化的内容就是那串字符串&#xff0c;是用户可以控制的&#xff08;即变量的值&#xff09;&#xff0c;且后台不正当的使用了PHP中的魔法函数&#xff0c;就会导致反序列化漏洞&#xff0c;可以执行任意命令。Java 序列化指 Java 对象转换为字节序…

Flink问题解决及性能调优-【Flink根据不同场景状态后端使用调优】

Flink 实时groupby聚合场景操作时&#xff0c;由于使用的是rocksdb状态后端&#xff0c;发现CPU的高负载卡在rocksdb的读写上&#xff0c;导致上游算子背压特别大。通过调优使用hashmap状态后端代替rocksdb状态后端&#xff0c;使吞吐量有了质的飞跃&#xff08;20倍的性能提升…