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方法,最后检测出符合匹配条件的复杂事件,进行转换处理,输出报警信息。

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

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

相关文章

ES文档索引、查询、分片、文档评分和分析器技术原理

技术原理 索引文档 索引文档分为单个文档和多个文档。 单个文档 新建单个文档所需要的步骤顺序: 客户端向 Node 1 发送新建、索引或者删除请求。节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 …

Android源码设计模式解析与实战第2版笔记(二)

第二章 应用最广的模式 — 单例模式 单例模式的定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应…

DT浏览器浏览网页的技巧

DT浏览器浏览网页的技巧: 1. 使用书签和收藏夹:将常用的网页添加到书签或收藏夹中,方便快速访问。 2. 善用搜索引擎:使用搜索引擎可以快速找到你需要的信息。在搜索时,可以使用关键词和筛选条件来精确查找。 3. 注意网…

【C/C++】详解程序环境和预处理(什么是程序环境?为什么要有程序环境?如何理解程序环境?)

目录 一、前言 二、 什么是程序环境? 三、 为什么要有程序环境? 四、如何理解程序环境? 🍎 ANSI C 标准 🍐 翻译环境和执行环境 五、详解翻译环境和执行环境 🍇翻译环境(重点&#xff01…

米贸搜|Meta金融科技行业广告政策Facebook

当前全球金融科技行业正处于快速发展阶段,作为全球最大的社交媒体网络之一,Meta平台为金融科技公司提供了一个重要的业务营销渠道,使其能够在广大用户群体中宣传和推广其产品和服务。 金融科技企业通过Meta平台投放广告,要注重政策…

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

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

【机组】单元模块实验的综合调试与驻机键盘和液晶显示器的使用方式

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 1. 综合实验的调试 1.1 实验…

three.js 鼠标选中模型弹出标签

效果&#xff1a;请关注抖音 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"></div><…

Emergent Abilities of Large Language Models 机翻mark

摘要 证明通过扩大语言模型可以可靠地提高性能和样本效率在广泛的下游任务。相反&#xff0c;本文讨论了我们称之为大型语言模型的新兴能力的一种不可预测的现象。我们认为如果一个能力不存在于较小的模型中&#xff0c;但在较大的模型中存在&#xff0c;则该能力就是新兴的。…

springboot 整合 Activiti6

1.添加maven依赖 <dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>6.0.0</version> </dependency>2.添加配置 spring:activiti:check-process-definitio…

【wink】如何调整视频比例、缩放视频、修改背景?

这三个问题都可在「视频剪辑-画布」功能里实现&#xff1a; 调整视频比例&#xff1a; 点击「视频剪辑 - 画布- 比例」&#xff0c;即可选择合适的视频比例。 缩放视频&#xff1a; 点击「视频剪辑 - 画布 - 缩放」&#xff0c;即可通过滑杆缩放视频。 修改背景&#xff1a;…

《动手学深度学习(PyTorch版)》笔记4.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

【大数据】Flink 中的事件时间处理

Flink 中的事件时间处理 1.时间戳2.水位线3.水位线传播和事件时间4.时间戳分配和水位线生成 在之前的博客中&#xff0c;我们强调了时间语义对于流处理应用的重要性并解释了 处理时间 和 事件时间 的差异。虽然处理时间是基于处理机器的本地时间&#xff0c;相对容易理解&#…

再谈Android View绘制流程

一&#xff0c;先思考何时开始绘制 笔者在这里提醒读者&#xff0c;Android的View是UI的高级抽象&#xff0c;我们平时使用的XML文件也好&#xff0c;本质是设计模式中的一种策略模式&#xff0c;其View可以理解为一种底层UI显示的Request。各种VIew的排布&#xff0c;来自于开…

scrapy的概念作用和工作流程

1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted[twɪstɪd]异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/zh_…

pytorch 实现中文文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/mi…

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETC…

ElasticSearch的集群管理命令

ElasticSearch版本 {"name" : "data-slave1","cluster_name" : "data-es","cluster_uuid" : "xxxxxxxxxx-eMwxw","version" : {"number" : "7.2.1","build_flavor" : &…

【JaveWeb教程】(32)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(5)文件上传的实现

目录 SpringBootWeb案例052. 文件上传2.1 简介2.2 本地存储 SpringBootWeb案例05 前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能&#xff0c;还有两个需要实现新增和修改员工。 本节的主要内容&#xff1a; 文件上传 2. 文件上传 在我们完成…

【开源】基于JAVA语言的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…