Flink问题总结
目录
1、Flink 的四大特征(基石)
2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法)
3、什么是侧道输出流,有什么用途
4、Flink 中两个流如何合并为一个流
5、Flink 中两个流如何 join
6、Flink 中都有哪些 window,什么是滑动,滚动窗口
7、flink 中都有哪些时间语义,对于 event_time 中数据迟到的处理(数据乱序)
8、flink 中的状态指的是什么?有哪些状态,用过哪些状态
Keyed State (键控状态)
9、flink 中 checkpoint 是什么,如何设置。
10、flink 中的重启策略 (流式计算中的重启策略)
11、什么是维表 join,如何实现,在哪使用过维表 join
1、 预加载维表
2、 热存储维表
12、flinksql 如何读取 kafka 或者 mysql 的数据。
1、Flink 的四大特征(基石)
Checkpoint:基于Chandy-Lamport算法,实现了分布式一致性快照,提供了一致性的语义。
State:状态,可以理解为历史计算结果。分为有状态计算和无状态计算。
Time:实现了Watermark机制,乱序数据处理,迟到数据容忍。
Window:开箱即用的滚动,滑动,会话窗口,以及灵活的自定义窗口。其实窗口本身就是状态,他不是立即出结果,而是将数据都保存起来,达到触发条件才计算。
2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法)
Source:
一.预定义Source基于本地集合的source(Collection-based-source)
基于文件的source(File-based-source)
基于网络套接字(socketTextStream)
具体:
在flink最常见的创建DataStream方式有四种:
l 使用env.fromElements(),这种方式也支持Tuple,自定义对象等复合形式。
注意:类型要一致,不一致可以用Object接收,但是使用会报错,比如:env.fromElements("haha", 1);
源码注释中有写:
l 使用env.fromCollection(),这种方式支持多种Collection的具体类型,如List,Set,Queue
l 使用env.generateSequence()方法创建基于Sequence的DataStream --已经废弃了
l 使用env.fromSequence()方法创建基于开始和结束的DataStream
一般用于学习测试时编造数据时使用
1.env.fromElements(可变参数);
2.env.fromColletion(各种集合);
3.env.fromSequence(开始,结束);
******************************************************************************************************
二.自定义Source
SourceFunction:非并行数据源(并行度只能=1) --接口
RichSourceFunction:多功能非并行数据源(并行度只能=1) --类
ParallelSourceFunction:并行数据源(并行度能够>=1) --接口
RichParallelSourceFunction:多功能并行数据源(并行度能够>=1) --类 【建议使用的】
Rich 字样代表富有,在编程中,富有代表可以调用的方法很多,功能很全的意思。
Sink:
经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是打印到控制台.
flink在批处理中常见的sink
- print 打印
- writerAsText 以文本格式输出
- writeAsCsv 以csv格式输出
- writeUsingOutputFormat 以指定的格式输出
- writeToSocket 输出到网络端口
- 自定义连接器(addSink)
Transformation-转换算子:
map算子:一个元素转换一个元素
FlatMap算子:将DataStream中的每一个元素转换为0...n个元素
Filter:过滤
KeyBy:按key聚合
Sum(底层是Reduce):可以对一个dataset 或者一个 group 来进行聚合计算,最终聚合成一个元素
Union合并:union可以合并多个同类型的流将多个DataStream 合并成一个DataStream【注意】:union合并的DataStream的类型必须是一致的
Connect连接:connect可以连接2个不同类型的流(最后需要处理后再输出)和union类似,但是connect只能连接两个流,两个流之间的数据类型可以不同,对两个流的数据可以分别应用不同的处理逻辑.
3、什么是侧道输出流,有什么用途
侧输出(Side Outputs)是一种流处理框架提供的功能,允许用户在一个流处理操作中产生多个输出流。 这使得开发者能够在同一个操作符中根据不同的条件将数据分流到不同的下游操作符,从而实现更复杂的业务逻辑。 侧输出可以看作是操作符的一个额外的输出通道,除了主输出流之外,操作符还可以产生一个或多个侧输出流。
比如在延迟数据问题里,超级迟到的数据用侧道输出流输出。
4、Flink 中两个流如何合并为一个流
Union合并:union可以合并多个同类型的流将多个DataStream 合并成一个DataStream【注意】:union合并的DataStream的类型必须是一致的
Connect连接:connect可以连接2个不同类型的流(最后需要处理后再输出)和union类似,但是connect只能连接两个流,两个流之间的数据类型可以不同,对两个流的数据可以分别应用不同的处理逻辑.
5、Flink 中两个流如何 join
参考问题11
6、Flink 中都有哪些 window,什么是滑动,滚动窗口
滚动窗口- TumblingWindow概念
流是连续的ÿ