作为大数据领域炙手可热的大数据组件,Flink作为大数据行业跳槽必问的组件,整理一些Flink相关的面试题供大家参考,有些题言简意赅即可,大多数的博客冗余一堆的知识点,看完要好久,我想帮大家提炼总结出核心的点,以帮助大家临阵磨枪,短时间掌握,当你把知识提炼出来,你会发现你的知识进步了,当你把简单提炼的知识再用自己的语言详细的说出来,那你就成为很厉害的人了,希望帮助大家收获到自己满意的offer。
1、Flink和Spark Streaming有什么区别
1、Flink 是实时处理引擎,基于事件驱动。而 Spark Streaming 是微批(Micro-Batch)的模型。(根本区别,一定要说出来)
2、时间机制:Spark Streaming只支持处理时间。 Flink支持处理时间、事件时间、注入时间。同时也支持watermark来处理滞后数据。
3、容错机制:Spark Streaming 通过checkpoint实现数据不丢失,但无法做到恰好一次处理语义。Flink 则使用两阶段提交协议和checkpoint实现精准一次处理,容错性好
2、Flink的编程模型
Source 数据输入
Transformation 中间转换
sink 数据输出
3、Flink如何设置并行度(括号里说出来就是真正用过的而不是光背答案)
详细知识在:
1、系统层面(flink客户端的配置yml文件中设置)
2、客户端层面(提交flink run -p的时候设置)
3、执行环境层面(构建Flink环境时getExecutionEnvironment.setParallelism(2)设置)
4、算子层面(算子.setParallelism(3),实际算子时设置)
优先级算子设置>执行环境>客户端>系统
(实际业务中通常设置和kafka分区数一样或者kafka分区倍数的并行度)
4、Flink的Slot和parallelism区别
slot是指单个taskmanager并发执行能力,parallelism指的是所有taskmanager的并发能力
5、Flink重启策略有哪些(括号里说出来就是真正用过的而不是光背答案)
详细知识在:Flink故障恢复和重启策略_一杯咖啡半杯糖的博客-CSDN博客_flink故障恢复
固定延迟重启策略
故障率重启策略
没有重启策略
Fallback重启策略(默认是这个Fallback重启策略)
6、Flink分区策略(9种)
详细知识在:Flink 分区策略_一杯咖啡半杯糖的博客-CSDN博客_flink的分区策略
GlobalPartitioner (数据发到下游算子的第一个实例)
ShufflePartitioner( 数据随机分发到下游算子)
RebalancePartitioner (数据循环发送到下游的实例)
RescalePartitioner (根据上下游算子的并行度,循环输出到下游算子)
BroadcastPartitioner (输出到下游算子的每个实例中)
ForwardPartitioner (上下游算子并行度一样)
KeyGroupStreamPartitioner (按 Key 的 Hash 值输出到下游算子)
CustomPartitionerWrapper (用户自定义分区器)
BinaryHashPartitioner (对BinaryRowData这种数据进行hash分区)
(实际使用在算子后加分区器)
7、Flink状态存储在哪里?
详细的看Flink状态后端(1.13版本之前适用)_一杯咖啡半杯糖的博客-CSDN博客
Flink状态后端(1.13版本及大于1.13版本适用)_一杯咖啡半杯糖的博客-CSDN博客
存在状态后端
1.13版本之前
MemoryStateBackend 开发时使用
FsStateBackend 生产时使用,常用
RocksDBStateBackend 生产时使用,非常大的状态时用1.13版本之后
HashMapStateBackend 相当于MemoryStateBackend和FsStateBackend,根据api不同
EmbeddedRocksDBStateBackend 生产时使用,非常大的状态时用
8、Flink中的时间有哪几类?(括号里说出来就是真正用过的而不是光背答案)
事件时间(event time):数据本身真正产生时间,(生产环境中用这个)
摄取时间(ingestion time): Flink 读取数据时的时间
处理时间(processing time): Flink中算子处理数据的时间
9、你们公司怎么提交的实时任务?(括号里说出来就是真正用过的而不是光背答案)
flink提交有几种模式
yarn-session模式
Application模式
Per-Job模式(生产中一般用这个,因为不论是监控还是提交都很方便,一个任务yarn分配一次)
关于内存分配的内容详见Flink的jobmanager到底设置多少内存为好_一杯咖啡半杯糖的博客-CSDN博客
Flink的taskmanager到底设置多少内存为好_一杯咖啡半杯糖的博客-CSDN博客
10、Flink的watermark?(括号里说出来就是真正用过的而不是光背答案)
Watermark 是Flink处理乱序事件的机制,基于事件时间,通常用来触发窗口计算
watermark 可以理解一个特殊的数据,插入到流里面
watermark也可以表示为 当前时间戳-设置的延迟时间,
(假如窗口是12点到12点05,最大延迟时间1min,
假如来了条数据是12点07,,那水印就是12点07-1min为12点06 > 12点05,就可以出发上面的窗口进行计算了)
11、Flink集群有的角色及其作用?
TaskManager:实际执行计算,与TaskManager状态的传递
JobManager:任务和资源管理,管理TaskManager,协调Checkpoints,故障恢复
Client客户端:与jobmanager交互并把任务提交到集群
12、Flink如何容错(重要,面试很频繁)
更多细节及理解请看Flink如何实现容错_一杯咖啡半杯糖的博客-CSDN博客
通过Checkpoint(基于ABS算法)实现容错
具体过程如下
1、JobManager定期向source发送Checkpoint的请求(由代码中的Checkpoint配置决定),向下游发送CheckpointBarrier
2、每个计算算子收到CheckpointBarrier,进行Barrier对齐,对齐后存储Checkpoint到状态后端,
3、sink节点Barrier对齐后,多个sink确认下Checkpoint是否正常,如果正常JobManager确定本次Checkpoint结束
4、中途失败只需要拿取前面的Checkpoint重新计算,进行恢复
13、Flink 的运行中必须依靠 Hadoop组件吗?
Flink可以不依赖Hadoop组件执行,例如可以跑单机版(但是实际生产环境使用通常是提交flink到yarn上运行,生产是需要hadoop组件的)
14、Flink 资源管理中 Task Slot 的概念
更多细节及理解请看Flink的Slot概念_一杯咖啡半杯糖的博客-CSDN博客
Slot决定了单个TaskManager并发执行能力(TaskManager 中的不同slot不会CPU隔离,也不会在运行时相互竞争Flink托管内存 ,而是一开始就瓜分了Flink托管内存)
15、Flink 的状态
Flink状态分为两个
1、Keyed State(键控状态)
2、Operator State (算子状态)
(实际生产中通常使用Keyed State中的ValueState、MapState)
16、Flink Table & SQL中TableEnvironment这个类有什么作用(红色说出来说明看过源码)
在内部catalog中注册表
注册catalogs
加载可插拔的模块
执行SQL查询
注册用户定义(标量,表或聚合)函数
DataStream和Table之间进行转换
StreamExecutionEnvironment的基类
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user
升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
我们在Ubuntu14.04和Gitlab9.3.7上运行,运行良好。我们正在尝试更新到Gitlabv9.3.8的最新安全补丁,但它给我们这个错误:Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension.currentdirectory:/home/git/gitlab/vendor/bundle/ruby/2.3.0/gems/re2-1.0.0/ext/re2/usr/local/bin/ruby-r./siteconf20170720-19622-15i0edf.rbextconf.rbcheckingformain(
我正在尝试使用Sinatra中的重定向和session在网站周围传递一些数据。这是一个简化的示例,使用PrettyPrint进行调试:require'pp'require'rubygems'require'sinatra'enable:sessionsget'/'dosession[:foo]='12345'puts'session1'ppsessionredirectto('/redir')endget'/redir'doputs'session2'ppsession'helloworld'end查看Thin的输出,我看到:>>Listeningon0.0.0.0:4567,CTRL
我遇到了以下问题。我有一个名为user的模型,它有一个名为activated的列。我试图通过激活的方法更新该值?但它给我错误:验证失败:密码不能为空,密码太短(最少6个字符)这对我来说没有意义,因为我没有接触密码字段!我只想更新激活的列。我把我认为相关的代码放在这里,但如果你认为你需要更多,请问:)非常感谢您!型号:attr_accessor:passwordattr_accessible:name,:email,:password,:password_confirmation,:activatedhas_many:sucu_votesemail_regex=/\A[\w+\-.]+@