葵花宝典------Flink中级
-
-
-
- 1、Flink是如何支持批流一体的?
- 2、Flink是如何做到高效的数据交换的?
- 3、Flink是如何做容错的?
- 4、Flink 分布式快照的原理是什么?
- 5、Flink是如何保证Exactly-once语义的?
- 6、Flink 的 kafka 连接器有什么特别的地方?
- 7、说说 Flink的内存管理是如何做的?
- 8、说说 Flink的序列化如何做的?
- 9、Flink中的Window出现了数据倾斜,你有什么解决办法?
- 10、Flink中在使用聚合函数 GroupBy、Distinct、KeyBy 等函数时出现数据热点该如何解决?
- 11、Flink任务延迟高,想解决这个问题,你会如何入手?
- 12、Flink是如何处理反压的?
- 13、Flink的反压和Strom有哪些不同?
- 14、Operator Chains(算子链)这个概念你了解吗?
- 15、Flink什么情况下才会把Operator chain在一起形成算子链?
- 16、说说Flink1.9的新特性?
- 17、消费kafka数据的时候,如何处理脏数据?
-
-
1、Flink是如何支持批流一体的?
本道面试题考察的其实就是一句话:Flink的开发者认为批处理是流处理的一种特殊情况。批处理是有限的流处理。Flink 使用一个引擎支持了DataSet API 和 DataStream API。
2、Flink是如何做到高效的数据交换的?
在一个Flink Job中,数据需要在不同的task中进行交换,整个数据交换是有 TaskManager 负责的,TaskManager 的网络组件首先从缓冲buffer中收集records,然后再发送。Records 并不是一个一个被发送的,二是积累一个批次再发送,batch 技术可以更加高效的利用网络资源。
3、Flink是如何做容错的?
Flink 实现容错主要靠强大的CheckPoint机制和State机制。Checkpoint 负责定时制作分布式快照、对程序中的状态进行备份;State 用来存储计算过程中的中间状态。
4、Flink 分布式快照的原理是什么?
Flink的分布式快照是根据Chandy-Lamport算法量身定做的。简单来说就是持续创建分布式数据流及其状态的一致快照。
核心思想是在 input source 端插入 barrier,控制 barrier 的同步来实现 snapshot 的备份和 exactly-once 语义。
5、Flink是如何保证Exactly-once语义的?
Flink通过实现两阶段提交和状态保存来实现端到端的一致性语义。 分为以下几个步骤:
开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面
预提交(preCommit)将内存中缓存的数据写入文件并关闭
正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟
丢弃(abort)丢弃临时文件
若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。
6、Flink 的 kafka 连接器有什么特别的地方?
Flink源码中有一个独立的connector模块,所有的其他connector都依赖于此模块,Flin