flink基础

1.任何程序都是需要有输入、处理、输出,Flink专业术语对应Source,map,Sink。
提到Flink程序的时候,我们会有Source数据源,然后map其实就是对输入的数据处理的意思,接着Sink就是落地数据,也就是我们存储数据到什么地方。

2.将核心数据处理接口分为两大类,一类是支持批计算的接口DataSet API,另外一类是支持流计算的接口DataStream API

3.Flink窗口:窗口分类可以分成:翻滚窗口(Tumbling Window,无重叠),滑动窗口(Sliding Window,有重叠),和会话窗口,(Session Window,活动间隙)

4.Flink DataStream和DataSet source都是基于什么格式?
基于文件
基于Collection

5.流处理和批处理分别入口是什么?
流:StreamExecutionEnvironment
批:ExecutionEnvironment

6.对于本地和远程运行程序,都可以使用哪个函数?
createLocalEnvironment()和createRemoteEnvironment(String host,int port,String和.jar文件)等方法来执行此操作

7.Flink数据源分为哪两类?
预先实现的
自定义数据源

8.Flink中kafka source是否为自定义?

9.如何在window下安装Flink?
java环境
flink下载
start-cluster.bat

10.Flink本地安装启动命令与原先版本有什么区别?
以前的版本使用的start–local.bat

11.window和Linux本地启动命令有什么区别?
start-cluster.bat | ./start-cluster.sh

12.如何查看Flink web ui?
http://localhost:8081

13.为什么说Flink是高性能?
dataFlow:Operator -> OperatorChain-> JobGraph
State:状态的保存,增量checkpoint
Memory:自己管理内存,减少GC次数和时间

14.什么是Flink状态计算?
某task/operator在某时刻的一个中间结果,可以通过状态累加,和排序等操作
可以存储状态进行恢复

15.Flink如何实现容错的?
checkpoint,错误就从已经完成的checkpoint恢复状态数据

16.Flink为何要内存管理?
避免JVM的内存缺点(OOM,Full GC,对象密度低)
二进制操作更高效,缓存操作更友好

17.Flink中流处理和批处理的关系是什么?
批处理视为流的特殊情况,批是有界数据,流是无界数据

18.Flink程序结是什么结构?
source -> map -> sink

19.Flink中source,sink分别是什么意思?
source:map上游来源数据
sink:map输出的保存数据

20.Flink数据源有哪些?
Apache Kafka (source/sink)
Apache Cassandra (sink)
Amazon Kinesis Streams (source/sink)
Elasticsearch (sink)
Hadoop FileSystem (sink)
RabbitMQ (source/sink)
Apache NiFi (source/sink)
Twitter Streaming API (source)
Google PubSub (source/sink)

21.如何自定义Flink数据源?
继承RichSourceFunction类,重载open,run,close方法

22.Flink如何定义Sink?
继承RichSourceFunction类,重载open,run,close方法
继承RichSinkFunction类,重载open,invoke,close方法

23.Flink提交到运行程序涉及哪些进程?
JobManager: 主节点
TaskManager: 从节点
JobClient: 客户端

24.Flink slot是什么?
Flink中的Executors 被定义为任务slots
Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。
Slot仅划分内存,不涉及cpu的划分。
Slot是Flink中的任务执行器(类似Storm中Executor),每个Slot可以运行多个task,而且一个task会以单独的线程来运行。

25.Job客户端是不是Flink内部部分,它的作用是什么?
作用:负责接受用户的程序,然后创建数据流,然后将数据流提交给作业管理器以便进一步执行。执行完成后,作业客户端将结果提供给用户。

26.Flink通信机制是什么?
Akka

27.Actor系统包含哪些内容?
在Flink中,actor是具有状态和行为的容器,它提供诸如调度,配置,日志记录等服务
本身是父子形式的树形结构
通过邮箱作为消息处理的机制

28.Flink中Map函数和FlatMap函数有什么区别?
map:输入一个元素并生成一个元素。
flatMap:输入一个元素并生成零个,一个或多个元素。

29.如何生成KeyedStream?
keyBy算子

30.KeyedStream如何转换为DataStream ?
reduce算子
fold算子

31.min和minBy之间的差异是什么?
min和minBy之间的差异是min返回最小值,而minBy返回该字段中具有最小值的元素(max和maxBy相同)
keyedStream.minBy(0);
keyedStream.minBy(“key”);

32.提取时间在概念上位于事件时间和处理时间之间。
事件时间:事件时间是每个事件在其生产设备上发生的时间。此时间通常在进入Flink之前嵌入记录中,并且可以从每个记录中提取该事件​​时间戳。在事件时间,时间的进展取决于数据,而不是任何时钟。事件时间程序必须指定如何生成事件时间水位线,这是表示事件时间进度的机制。
提取时间:提取时间是事件进入Flink的时间。在源operator处,每个记录将源的当前时间作为时间戳,并且基于时间的操作(如时间窗口)引用该时间戳。
处理时间:处理时间是指执行相应操作的机器的系统时间。

33.Join Hints来指定运行时执行join的方式。这些提示描述了连接是通过分区还是广播,以及它是使用基于排序的(sort-based)还是基于散列(hash-based)的算法。如果没有指定链接方式,系统将尝试对输入大小进行评估,并根据这些评估选择最佳策略。
注意,连接transformation 仅适用于等连接。 其他连接类型需要使用OuterJoin或CoGroup表示。
val input1: DataSet[SomeType] = // […]
val input2: DataSet[AnotherType] = // […]
// hint that the second DataSet is very small
val result1 = input1.leftOuterJoin(input2, JoinHint.REPARTITION_SORT_MERGE).where(“id”).equalTo(“key”)
val result2 = input1.rightOuterJoin(input2, JoinHint.BROADCAST_HASH_FIRST).where(“id”).equalTo(“key”)

以下hints 可用:
OPTIMIZER_CHOOSES:相当于不提供任何提示,将选择留给系统。
BROADCAST_HASH_FIRST:广播第一个输入并从中构建一个哈希表,由第二个输入探测。如果第一个输入非常小,那么这是一个很好的策略
BROADCAST_HASH_SECOND:广播第二个输入并从中构建一个哈希表,由第一个输入探测。如果第二个输入非常小,这是一个很好的策略。
REPARTITION_HASH_FIRST:系统对每个输入进行分区(shuffle)(除非输入已经分区)并从第一个输入构建哈希表。如果第一个输入小于第二个输入,则此策略很好,尽管两个输入仍然很大。
REPARTITION_HASH_SECOND:系统对每个输入进行分区(shuffle)(除非输入已经分区)并从第二个输入构建哈希表。如果第二个输入小于第一个输入,则此策略很好,尽管两个输入仍然很大。
REPARTITION_SORT_MERGE:系统对每个输入进行分区(shuffle)(除非输入已经被分区)并对每个输入进行排序(除非它已经排序)。输入通过已排序输入的流合并来连接。如果已经对一个或两个输入进行了排序,则此策略很好。
注意:并非所有外部联接类型都支持所有执行策略。
LeftOuterJoin supports:           RightOuterJoin supports:          FullOuterJoin supports:
OPTIMIZER_CHOOSES                 OPTIMIZER_CHOOSES                 OPTIMIZER_CHOOSES
BROADCAST_HASH_SECOND             BROADCAST_HASH_FIRST              REPARTITION_SORT_MERGE
REPARTITION_HASH_SECOND           REPARTITION_HASH_FIRST
REPARTITION_SORT_MERGE            REPARTITION_SORT_MERGE

34.Flink 双数据流转换为单数据流操作的运算有cogroup, join和coflatmap
Join:只输出条件匹配的元素对。
CoGroup: 除了输出匹配的元素对以外,未能匹配的元素也会输出。
CoFlatMap:没有匹配条件,不进行匹配,分别处理两个流的元素。在此基础上完全可以实现join和cogroup的功能,比他们使用上更加自由。

35.Hash-Partition与Range-Partition的区别?
HashPartitioner分区的原理,对于给定的key,计算其hashCode,并除于分区的个数取余,如果余数小于0,则用余数+分区的个数,最后返回的值就是这个key所属的分区ID。
RangePartitioner分区器的主要作用就是将一定范围内的数映射到某一个分区内,分界算法对应的函数是rangeBounds。RangePartitioner分区的优势,可以解决HashPartitioner中可能出现的数据不均匀现象,每个分区的数据,都比另外的分区的数据大或则小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值