Flink学习总结

本文为学习B站上的Flink入门视频课程的总结,有些重点知识或许在面试中会被问到,故于此分享学习。

1.Flink和Storm,Hadoop,Spark的对比?

Hadoop是纯粹的批处理框架,storm是纯粹的流处理框架,spark通过基于两种不同的技术实现了批处理和流处理,但是Flink同时支持实现了批处理和流处理,将批处理作为一种特殊的流处理。

Storm:延迟低,能做到毫秒级,牺牲了精确性,没法做到高吞吐,需要搭建独立的Storm集群。

Hadoop: 纯粹的批处理框架,吞吐量大。

Spark streaming: 将连续时间中的流数据分割成一系列微小的批量作业,做到精确一致性的语义,提高吞吐量。本质上是一种微批次的处理技术。

Flink:高吞吐,在压力下保持正确,低延迟,语义化窗口。

2.Flink如何实现将批处理数据变为流数据处理的?

它通过将批处理数据一批一批的采集过来,在底层就相当于实现了流数据的特点,然后就可以统一进行流处理了。

3.Flink在部署时有哪两种常见模式?

常见的模式有YARN模式和standalone模式。

4.解释Flink的slot概念?

slot在是将JVM进行等分,用来划分分区,在每个slot中执行一个task,slot的个数决定一个taskmanager的最大并行度。

5.如何理解精确一致性(exactly-once)?

就是在保证数据不丢失的情况下,还能保证数据的不重复。

6.解释流处理和批处理?

批处理的特点是有界,持久,大量,需要访问全套记录才能完成的计算工作,一般用于离线统计,要求支持高吞吐,高效处理。流处理的特点是无界,实时,流处理无需对整个数据集执行操作,而是对通过系统传输的每个数据执行操作,一般用于实时统计,要求支持低延迟,精确一致性保证。

7.Spark同时支持批处理和流处理跟Flink有什么不一样?

Spark是通过Spark Streaming和Spark  Pool+SQL两套技术体系实现了

8.简述一下Flink的计算架构?

可以大致分为四层,最底层是single JVM,或者Cluster或者云作为部署环境,网上就是核心层,叫做运行时,再往上就是datastream API和Dataset API分别用来进行流处理和批处理,在这之上还有些应用层的库, 比如事件处理,机器学习处理等。

9.Flink的基本架构?

包含两种类型的处理器,JobManager与TaskManager。本质上是两个JVM的进程,JobManager相当于Master,负责资源申请和任务分发,TaskManager相当于Executor,主要负责任务的执行。Taskmanager需要通过注册的方式在Jobmanager中进行注册。

10.有界数据流和无界数据流?

有界数据流就是有头有尾的数据流,无界数据流就是有头无尾的数据流,对于无界数据流的处理,一般也会通过窗口机制来进行处理。

11.Flink数据处理的抽象级别?

一共可以分为四层,最底层的是有状态的流处理,往上可以是Datastream/Dataset API进行查询,在往上就是Table API和SQL。对于Table API可以通过select语句等对表格进行操作。

12.Flink的运行架构?

                                                                    图片来源:尚硅谷大数据技术之Flink

1)上传Flink的jar包和配置到HDFS上。

2)向ResourceManager提交Job。

3)ResourceManager可以启动ApplicationMaster,JobManager被包含在ApplicationMaster当中。

4)JobManager去ResourceManager中申请资源。

5)申请资源后最终启动TaskManager,并且进行任务的划分,然后分发给taskManager。

YARN模式是通过部署YARN session将Flink部署到NodeManager的相关容器当中。

13.Flink的任务调度原理

                                                                   图片来源:尚硅谷大数据技术之Flink

1)将每个程序抽象为一个数据流图。

2)Actor System是模块之间的通信功能实现。

3)通过检测数据流图算子之间的分区是否有变化来划分task,然后将task分发给不同的slot。

4)每个TaskManager会根据配置的Slot的参数来将JVM等分为几个slot,注意只分配内存,不划分CPU。

5)slot数是支持的最大并行度,并行度参数决定最终的并行情况。

14.worker和slot之间的关系?

每一个worker(TaskManager)是一个JVM进程,它可能会在独立的线程上执行一个或多个subtask。通过slot来指定一个worker最多可以执行几个subtask。每一个task就是一个线程。

为了避免不同分区之间的通信导致资源浪费,只有当检测到分区数量变化时,才会将不同算子划分为不同的task,这一动作通过redistribute来完成,否则会将连续的算子放到一个task中去执行。

15.程序与数据流之间的关系

Flink程序的基础模块是流与转换,流的本质就上数据的中间处理结果,转换就是一个或多个算子。

                                    

                                                                图片来源:尚硅谷大数据技术之Flink

资源获取,中间处理,最终通过sink进行结果的输出。

16.stream在operator之间的传输形式有哪些?

1)one-to-one:维护操作前后分区的个数以及元素的顺序。

2)  redistribute:原来在同一分区的数据被分到不同的分区当中,数据被打散了。

3)对于两个算子之间属于one2one的关系时,可以将其组合在一起,放到一个task之间进行执行。只有对于会引起redistribute的算子才将其放到不同的task中进行执行。

                           

                                                              图片来源:尚硅谷大数据技术之Flink

17.Flink的运行模型?

1)获得一个执行环境。

2)加载/创建初始数据。

3)指定转换这些数据。

4)指定放置计算结果的位置。

5)触发程序执行。

18.Flink创建执行环境的方式有哪些?

1)getExecutionEnviroment,会查询运行的方式决定返回什么样的运行环境。

2)  createLocalEnviroment,创建一个本地的执行环境。

3)createRemoteEnviroment,创建一个远端的执行环境。

19.Flink创建数据源有哪几种方式?

1)readTextFile(path),一列一列读取文本文件,并将结果作为String返回

2)readFile(fileInputFormat,path)

3)基于集合的数据源

4)基于socket的数据源

5)可以从kafka获取数据

20.Flink的Sink方式有哪些?

1)writeAsText

2)  writeAsCsv

3)  print/printToErr,直接将结果打印出来

4)writeUsingOutFormat(自定义对象到字节的转换)

5)writeToSocket,以socket的形式发送。

21. Flink常见的算子有哪些?

1)Map,

2)  FlatMap,将一条数据按指定规则切分后。

3)  Filter,按指定条件过滤掉。

4)  Connect + CoMap/CoFlatmap。

5)  Split + Select,将流按条件分割后,可以进行选择。

6)Union,将两个流合并为一个流。

7)KeyBy,将具有相同关键字的聚合在一起,放到同一个分区里面。

8)Reduce,进行聚合操作,需要先加窗口才可以。

9)   Fold,

10) Aggregation,

22. 请简单说明Flink里面的window和Time的概念

1)Flink的时间一共分为Event Time(事件创建的时间),Ingestion Time(数据进入Flink的时间),Processing Time,就是每一个执行基于时间操作的算子的本地系统时间,与机器相关。

2)window可以分为两类,一种叫做countwindow,另一种叫做timewindow。可以根据窗口实现原理的不同分为三类:滚动窗口(Tumbling window),滑动窗口(Sliding window)和会话窗口(Session window)。

23.请简单说一下EventTime和Time的区别

1)EventTime是指日志记录中记录的时间,可以看做是事件的实际时间。

24.简单解释一下Watermark的含义

1)watermark是用来处理乱序事件的,而正确的处理乱序事件,通常用watermark结合window来实现。

2)数据流中的watermark用于表示eventTime小于watermark的数据,都已经到达了,因此window的执行也是由watermark触发的。

3)watermark本质上相当于是一个延迟触发机制,在window的触发机制里面,如果有步长,那么会根据步长的大小来进行触发,窗口大小是数据的缓存长度,过老的数据会被丢弃。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个流式处理框架,它可以用于处理实时数据流。在Java开发中,可以使用Flink来构建和执行各种数据处理任务。在Flink学习笔记中,大部分的代码示例都是使用Java编写的,因为作者本人是Java开发工程师。不过,也会涉及到其他编程语言,比如Scala等。 在使用Flink进行开发时,你可以根据需求自定义数据源。一种常见的做法是实现SourceFunction接口,并重写run方法和cancel方法。例如,可以创建一个DemoTransactionSource类来实现自定义数据源,该类继承自SourceFunction,并在run方法中发射元素(数据)。 在Flink中还有一个重要的概念是累加器。累加器用于统计任务在运行过程中的情况,比如处理了多少条数据。常见的累加器实现有IntCounter、LongCounter和DoubleCounter。你可以通过在函数中使用累加器来增加其值,并在作业执行完毕后获取累加器的结果。例如,可以使用IntCounter作为累加器,在数据处理过程中使用counter.add(1)来增加累加器的值,然后在作业执行完毕后通过JobExecutionResult对象的getAccumulatorResult方法获取累加器的结果。 总结起来,如果你想在Java中使用Flink进行流式处理,你可以学习Flink的相关知识,并根据需求来自定义数据源和使用累加器来统计任务的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Flink - Java篇](https://blog.csdn.net/weixin_48518621/article/details/123189828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值