面试题百日百刷-flink篇(八)

发布于:2023-05-02 ⋅ 阅读:(431) ⋅ 点赞:(0)

锁屏面试题百日百刷,每个工作日坚持更新面试题。请看到最后就能获取你想要的, 接下来的是今日的面试题:

1.Operator Chains(算子链)这个概念你了解吗?**

为了更高效地分布式执行,Flink会尽可能地将operator的subtask链接(chain)在一起形成task。每个task在一个线程中执行。将operators链接成task是非常有效的优化:它能减少线程之间的切换,减少消息的序列化/反序列化,减少数据在缓冲区的交换,减少了延迟的同时提高整体的吞吐量。这就是我们所说的算子链。

2.Flink什么情况下才会把Operator chain在一起形成算子链?**

两个operator chain在一起的的条件:

上下游的并行度一致

下游节点的入度为1 (也就是说下游节点没有来自其他节点的输入)

上下游节点都在同一个 slot group 中(下面会解释 slot group)

下游节点的 chain 策略为 ALWAYS(可以与上下游链接,map、flatmap、filter等默认是ALWAYS)

上游节点的 chain 策略为 ALWAYS 或 HEAD(只能与下游链接,不能与上游链接,Source默认是HEAD)

两个节点间数据分区方式是 forward(参考理解数据流的分区)

用户没有禁用 chain

3.flink中消费kafka数据的时候,如何处理脏数据?**

可以在处理前加一个fliter算子,将不符合规则的数据过滤出去。

4.Flink Job的提交流程**

用户提交的Flink Job会被转化成一个DAG任务运行,分别是:StreamGraph、JobGraph、ExecutionGraph,Flink中JobManager与TaskManager,JobManager与Client的交互是基于Akka工具包的,是通过消息驱动。整个Flink Job的提交还包含着ActorSystem的创建,JobManager的启动,TaskManager的启动和注册。

5.Flink所谓"三层图"结构是哪几个"图"?**

一个Flink任务的DAG生成计算图大致经历以下三个过程:

1)StreamGraph 最接近代码所表达的逻辑层a面的计算拓扑结构,按照用户代码的执行顺序向

StreamExecutionEnvironment添加StreamTransformation构成流式图。

2)JobGraph 从StreamGraph生成,将可以串联合并的节点进行合并,设置节点之间的边,安排资源共享slot槽位和放置相关联的节点,上传任务所需的文件,设置检查点配置等。相当于经过部分初始化和优化处理的任务图。

3)ExecutionGraph 由JobGraph转换而来,包含了任务具体执行所需的内容,是最贴近底层实现的执行图。

全部内容在git上,了解更多请点我头像或到我的主页去获得,谢谢**

本文含有隐藏内容,请 开通VIP 后查看