Flink 面试题总结及答案

基础

state的分类
key state和operate state
state 的重分布

Flink状态管理详解:Keyed State和Operator List State深度解析 - 掘金

checkpoint 和save point

https://zhuanlan.zhihu.com/p/79526638

 flink job 的容错策略

如果在没有持续消息输出的情况下,如何定时输出

主要是现实有可能不会一直有消息输入,但是要定时输出的情况

  @Overridepublic void processElement(Tuple2<String, String> value, Context ctx, Collector<Tuple2<String, Long>> out) throws Exception {// retrieve the current countCountWithTimestamp current = state.value();if (current == null) {current = new CountWithTimestamp();current.key = value.f0;}// update the state's countcurrent.count++;// set the state's timestamp to the record's assigned event time timestampcurrent.lastModified = ctx.timestamp();// write the state backstate.update(current);// schedule the next timer 60 seconds from the current event time// 这里注册一个timerctx.timerService().registerEventTimeTimer(current.lastModified + 60000);}@Overridepublic void onTimer(long timestamp, OnTimerContext ctx, Collector<Tuple2<String, Long>> out) throws Exception {// get the state for the key that scheduled the timerCountWithTimestamp result = state.value();// check if this is an outdated timer or the latest timerif (timestamp == result.lastModified + 60000) {// emit the state on timeoutout.collect(new Tuple2<String, Long>(result.key, result.count));//每次发送一个消息后,再注册一个timerctx.timerService().registerEventTimeTimer(current.lastModified + 60000);}}
state backend 有哪几类
  1. HashMapStateBackend

    • 默认状态后端,适用于大多数情况。
    • 状态数据作为 Java 对象存储在 JVM 堆上。
    • 适用于大型状态、长窗口、大型键值状态的作业。
    • 推荐在高可用性设置中使用。
    • 建议将管理内存设置为零,以确保 JVM 上用户代码的最大内存分配。
  2. EmbeddedRocksDBStateBackend

    • 将数据存储在 RocksDB 数据库中,通常存储在 TaskManager 的本地数据目录。
    • 数据以序列化的字节数组形式存储,而不是 Java 对象。
    • 支持异步快照,适合需要大量状态和长窗口的大型作业。
    • 由于 RocksDB 的 JNI 桥接 API 基于 byte[],每个键和值的最大支持大小为 2^31 字节。
    • 支持增量快照,可以减少检查点时间,提高恢复速度。
  3. 选择正确的状态后端

    • HashMapStateBackend 提供快速的访问和更新,但状态大小受限于集群内的可用内存。
    • EmbeddedRocksDBStateBackend 可以根据可用磁盘空间扩展,是唯一支持增量快照的状态后端,但性能可能较慢。
  4. 配置状态后端

    • 默认情况下,如果未指定其他配置,Flink 会使用 HashMapStateBackend。
    • 可以在 Flink 配置文件中设置默认状态后端,也可以在每个作业中单独设置。
  5. RocksDB 状态后端细节

    • 支持增量快照,可以减少检查点时间。
    • 内存管理:Flink 默认配置 RocksDB 的内存分配,以确保 TaskManagers 的内存使用在环境限制内。
    • 定时器(Heap vs. RocksDB):默认情况下,即使使用 RocksDB 存储其他状态,定时器也存储在 RocksDB 中。可以选择将定时器存储在 JVM 堆上。
  6. 高级配置

    • 可以手动控制 RocksDB 的内存分配,通过配置 RocksDBOptionsFactory。
    • 可以启用 RocksDB 的原生指标,但可能会对性能产生负面影响。
  7. 变更日志(Changelog)

    • 旨在减少检查点时间,提高端到端延迟。
    • 通过持续上传状态变化形成变更日志,检查点时只需上传相关部分。
    • 支持从保存点和检查点恢复。
如果我用的EmbeddedRocksDBStateBackend,为啥还要配置checkpoint目录
  1. 检查点数据存储:检查点是 Flink 用于确保流处理作业容错性的关键机制。当启用检查点时,Flink 会定期保存作业的状态快照。这些快照包括了作业的当前状态信息,如键值状态、窗口状态、定时器等。即使状态数据存储在 RocksDB 中,检查点的元数据和可能的状态快照(如增量快照)仍然需要被保存到文件系统中。

  2. 恢复和故障转移:在作业失败时,Flink 需要从最近的检查点恢复状态。这要求检查点数据必须被持久化到一个可靠的存储系统中,通常是分布式文件系统(如 HDFS、Amazon S3 等)。这样,无论作业的状态数据存储在哪里,检查点数据都可以从这个目录中恢复。

  3. 增量快照:对于 EmbeddedRocksDBStateBackend,Flink 支持增量快照。这意味着检查点不仅保存了状态数据的完整副本,还记录了自上次检查点以来状态的变化。这些增量快照也需要被保存到检查点目录中,以便在恢复时能够更高效地重建状态。

  4. 配置一致性:配置检查点目录为 Flink 提供了一个统一的配置点,无论使用哪种状态后端,都可以在同一个配置文件中指定检查点的存储位置。这有助于简化配置管理,并确保在不同状态后端之间切换时的一致性。

flink 与spark 简单比较

flink 有哪几种时间
时间概念描述适用场景
事件时间 (Event Time)数据本身所携带的时间戳,在事件生成时确定。处理乱序事件、处理延迟数据的场景
处理时间 (Processing Time)数据到达 Flink 系统时的系统时间。实时流处理任务、简单的数据处理场景
摄取时间 (Ingestion Time)数据进入 Flink 系统时所携带的时间戳,由 Source 接收到数据时确定。中间场景,在事件时间和处理时间之间权衡
flink 有哪些语义
流处理语义描述应用场景
精确一次语义 (Exactly-Once)每个事件都会被处理且仅被处理一次,不会出现数据丢失或重复处理的情况。金融交易处理、关键业务数据处理
至少一次语义 (At-Least-Once)每个事件至少会被处理一次,但可能会出现数据重复处理的情况。实时日志收集、实时指标计算
无语义 (No Semantics)对事件的处理不进行任何语义上的保证,可能会出现数据丢失、重复处理甚至乱序处理的情况。实时推荐系统、实时监控系统
flink 任务流程

flink 广播变量

flink 的operator chain

flink 窗口有哪几种
窗口类型描述使用场景
滚动窗口 (Tumbling Windows)固定大小的窗口,按固定的时间间隔对数据流进行切分。对数据流进行固定时间间隔的聚合操作。
滑动窗口 (Sliding Windows)由固定大小和滑动时间间隔组成的窗口,窗口之间可以有重叠部分。对数据流进行连续的聚合操作。
会话窗口 (Session Windows)根据数据流中的会话间隙划分窗口,一个会话表示一段连续的时间内数据的集合。对非连续数据流进行聚合操作。
全局窗口 (Global Windows)将整个数据流作为一个窗口处理,不对数据进行切分。对整个数据流进行全局聚合操作
flink 内存管理

原理

双流JOIN 实现原理

Flink DataStream 如何实现双流Join-腾讯云开发者社区-腾讯云

和维度关联的几种方案
方案描述优点缺点
提前加载方案在实现方案启动时从外部存储加载维度数据,实现简单,但不能更新数据实现简单,适用于静态数据,不需要频繁更新的场景不能更新数据,不适用于频繁变动的维度数据
定时更新方案定时从外部存储加载维度数据,然后存储,定时更新,解决了不能更新数据的问题,但不支持实时更新,有延时,不适用于大数据量可以解决数据不能更新的问题不能实时更新,有延时,不适用于大数据量
实时更新方案实时从外部存储查询维度数据,支持超大数据量,但可能会产生查询瓶颈,可以使用异步查询的方案可以支持超大数据量,可以实现实时更新可能会产生查询瓶颈,实时性取决于外部存储的性能和网络延迟
广播数据的方案将更新后的数据通过广播形式和业务数据进行 Join,可以实现实时更新维表可以实时更新维表需要维护广播数据的一致性和更新机制,可能会增加网络传输和内存消耗
Temporal Table Function 方案在 Flink SQL 中通过 Temporal Table Function 方案实现,可以 join 不同时间的维度数据可以实现不同时间的维度数据的 join适用于 Flink SQL,可能需要对应的支持和功能

watermark生成策略
策略描述
周期性生成定期生成 Watermark,例如每隔一定时间(如每100毫秒)生成一个 Watermark,表示事件时间已经到达或者超过了这个 Watermark 所表示的时间戳。
事件驱动生成当特定类型的事件到达时,触发生成一个 Watermark。例如,在基于窗口操作的情况下,当收到窗口关闭事件时,可以根据这个事件生成一个 Watermark,表示当前处理的时间戳已经到达或者超过了窗口的关闭时间。
自定义生成策略Flink 提供了灵活的 API,允许用户根据自己的需求实现自定义的 Watermark 生成策略。通过实现 AssignerWithPunctuatedWatermarks 或者 AssignerWithPeriodicWatermarks 接口,用户可以定义自己的 Watermark 生成逻辑。

flink 一次性实现实现

实现方式描述
Checkpointing 机制Flink 使用 Checkpointing 机制来实现 Exactly-Once 语义。Checkpoint 是 Flink 在作业执行过程中创建的状态快照,用于保存作业状态。Flink 在执行任务时周期性地创建 Checkpoint,并将 Checkpoint 存储到可靠的持久化存储系统中。当作业失败或需要恢复时,Flink 可以使用最近的 Checkpoint 来恢复作业状态,从而实现 Exactly-Once 语义。Checkpointing 机制还包括了分布式快照的协调和一致性保证,确保在失败时能够正确恢复状态。
状态管理和恢复Flink 通过状态管理和恢复机制来保证作业状态的一致性和恢复。Flink 的状态管理器负责管理作业的状态,并在需要时将状态持久化到外部存储系统中。当作业失败或需要恢复时,Flink 可以从外部存储系统中恢复状态,以确保作业能够从失败的地方继续执行,并且保持一致性
flink 端到端一次性实现实现

要点描述
Exactly-Once 语义支持使用支持事务性写入的数据源,如 Apache Kafka、Apache Hudi、Apache HBase 等。确保 Flink 作业的容错机制能够正确处理故障情况,如使用 Flink 的 Checkpointing 机制实现状态的持久化和恢复。
Exactly-Once 语义的语义保证确保所有算子都是幂等的。确保 Flink 作业的状态管理和状态恢复机制能够确保状态一致性。
端到端一致性保证保证与外部系统的交互也具有 Exactly-Once 语义,可能需要与外部系统的事务性交互或通过幂等性操作和重试机制来实现。实现适当的错误处理机制,包括故障恢复、幂等性操作、重试策略等,以确保在发生故障或异常情况时能够正确处理并保持端到端的一致性。
持久化数据源的选择选择支持事务性写入和 Exactly-Once 语义的持久化数据源,如 Apache Kafka、Apache Hudi、Apache HBase 等。这些数据源能够提供端到端的一致性保证,并且与 Flink 的 Exactly-Once 语义兼容。
错误处理机制实现适当的错误处理机制,包括故障恢复、幂等性操作、重试策略等。确保在发生故障或异常情况时能够正确处理并保持端到端的一致性。
flink 撤回语义

Flink 提供了撤回语义(Retraction Semantics),这是指在流式计算中对数据进行修正或撤回的能力。撤回语义通常用于在处理实时数据流时,对先前发出的结果进行更新或删除。

实现撤回语义的一种方法是使用特殊的数据表示来表示撤回操作。通常,使用特殊的撤回消息来标识先前发出的数据应该被撤回,而不是直接删除数据。这样做可以保持数据流的完整性,并允许系统在撤回消息到达时正确地更新之前计算的结果。

flink为啥state用的rocksdb
  1. 可靠性和持久性:RocksDB 提供了高度可靠的持久化存储,能够在发生故障时恢复状态。这对于需要长时间运行的流处理应用非常重要。

  2. 性能:RocksDB 是一个高效的键值存储引擎,具有快速的读取和写入速度。对于处理大量数据和需要快速访问状态的应用场景,RocksDB 提供了比内存状态后端更好的性能。

  3. 可扩展性:RocksDB 具有良好的可扩展性,能够处理大规模的状态数据。这对于处理高吞吐量和大规模数据的流应用非常重要。

  4. 内存管理:使用 RocksDB 作为状态后端可以有效地管理状态数据的内存,避免了因为状态数据过大导致内存不足的问题。RocksDB 可以自动将部分数据存储在磁盘上,从而降低了内存使用量。

  5. 灵活性:RocksDB 提供了丰富的配置选项和优化参数,可以根据具体的应用需求进行调整和优化,从而提高性能和可靠性。

  6. 唯一支持增量的状态后端

Hash shuffle 和sort shuffle

反压如何分析

Flink反压原理及分析 - 墨天轮

反压的实现原理

checkpoint 超时可能是由啥导致的
因素描述
资源不足集群资源不足以处理所有任务和状态,例如 TaskManager 的资源(如CPU、内存)不足以处理数据流和状态的快照,或者网络带宽不足以传输大量的状态数据。
状态大小状态数据量过大,需要花费较长时间来生成和传输快照,可能受到数据流速率、窗口大小、状态保留策略等因素的影响。
IO负载集群的IO负载较高,可能影响快照的生成和传输速度,例如数据存储和传输过程中的瓶颈导致的,如磁盘IO限制或网络传输速度限制。
网络延迟集群中节点之间的网络延迟较高,会影响快照的传输速度,可能受到网络拓扑、节点间距离、网络拥塞等因素的影响。
任务处理时间长任务的处理时间超过了配置的 checkpoint 超时时间,可能是由于任务逻辑复杂、处理大量数据或计算密集型操作导致的。
故障节点在 checkpoint 过程中涉及的节点出现故障或性能下降,例如 TaskManager 节点宕机或网络故障,可能导致 checkpoint 操作失败或超时。

架构

flink 架构有哪些角色

组件描述
JobManager负责整个作业的调度和协调、管理作业的生命周期(包括启动、监控和故障处理)、负责触发和协调作业的 Checkpoint、管理集群的资源(与资源管理器通信进行资源分配)、在高可用性模式下确保集群的高可用性。
TaskManager执行实际的数据处理任务、管理任务的状态(包括数据流程图、中间结果、缓存的状态等)、负责数据交换(通过网络传输数据流)、管理本地资源(如 CPU、内存等)、与 JobManager 协调资源的分配和释放。
高可用实现

如何一个架构同时支持流和批

批是流的一种特殊情况

组件描述
DataStream API用于处理无限和有限的数据流,支持流式和批处理,具有事件时间处理、窗口操作等特性。
运行时架构分布式流处理引擎,用于处理实时数据流;优化器和执行引擎,针对批处理作业进行优化和执行。
状态管理高效可靠的状态管理机制,用于在流处理和批处理作业中管理状态。
任务调度和资源管理负责将作业中的任务分配给集群中的计算资源,并确保任务按照预期的方式执行,同时合理地利用集群资源。

应用

flink cdc
     mysql cdc
     tidb cdc
     无锁算法
     如何确保顺序      
     如何确保任务失败后,可以从中断节点开始消费

Flink CDC 2.0 正式发布,详解核心改进 - 知乎

flink sql

flink 如何实现top n 操作
CREATE TABLE transactions (user_id STRING,amount DOUBLE
) WITH ('connector' = 'kafka','topic' = 'transactions_topic','format' = 'json'
);-- 计算每个用户的交易总额,并获取Top N
SELECTuser_id,total_amount
FROM (SELECTuser_id,SUM(amount) AS total_amount,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY SUM(amount) DESC) AS row_numFROMtransactionsGROUP BYuser_id
)
WHERErow_num <= 10;
flink 优化实时任务     

优化方法描述
状态后端选择根据任务需求选择适合的状态后端,如RocksDB或内存
并行度调整根据数据量和任务复杂度调整并行度以提高性能
窗口优化考虑使用滑动窗口、会话窗口等优化窗口设计
算子链优化合并多个算子以减少状态转换和数据序列化的开销
网络通信优化减少网络通信开销,如使用本地连接和网络拓扑优化
内存管理优化优化内存分配和管理以减少GC开销
数据分区优化合理分区数据以提高并行度和减少数据倾斜
代码优化优化代码逻辑和数据处理逻辑以提高执行效率
任务调度优化调整任务调度策略以更好地利用资源和平衡负载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

【CSP试题回顾】201312-3-最大的矩形

CSP-201312-3-最大的矩形 解题思路 1. 遍历所有可能的矩形高度&#xff1a; 通过遍历所有矩形高度来找到最大的矩形&#xff0c;即对每个可能的高度 it&#xff08;从直方图中的最小高度到最大高度 heightMax&#xff09;&#xff0c;代码将尝试找到在这个高度或以上的最长连…

Linux操作系统——进程信号

1.信号的概念 生活当中哪些场景算信号呢&#xff1f;比如说你晚上调了个闹钟&#xff0c;然后第二天早上你听到了闹钟响了你就知道该起床了&#xff0c;这种机制就叫做信号机制。在生活中我们的信号是非常非常多的&#xff0c;比如说有&#xff1a;红绿灯&#xff0c;下课铃声…

爬虫案例一

首先我举一个案例比如豆瓣电影排行榜 (douban.com)这个电影&#xff0c;首先我们进去检查源代码 说明源代码有&#xff0c;说明是服务器渲染&#xff0c;可以直接那html 但是返回的结果是空&#xff0c;所以我们需要在头里面加上User-Agent 然后可以看到有返回的结果&#xff0…

Docker快速集成minio

拉取镜像&#xff08;默认最新的&#xff09; docker pull minio/minio创建配制和数据映射文件夹&#xff08;用于将容器内的配置和数据映射到本地&#xff09; 这边的路径可以修改成自己想要的文件夹 mkdir -p /data/minio/{config,data}启动容器 (这边启动容器要保证本地映…

什么是SpringCloud,有哪些组件?

spring Cloud 是基于spring boot的分布式系统开发工具,它提供了一系列开箱即用的,针对分布式系统开发的特性和组件。用于帮助开发人员快速构建和管理云原生应用程序。 Spring Cloud 的主要目标是解决分布式系统中的常见问题,例如服务发现,负载均衡,配置管理,断路器,消息总…

LabVIEW起重机工作参数远程监测系统

LabVIEW起重机工作参数远程监测系统 随着起重机技术的持续发展&#xff0c;对其工作参数的实时监控需求日益增加。设计了一个基于LabVIEW和TBox的起重机工作参数远程监测系统&#xff0c;能够实现起重机工作参数的实时采集、传输、解析和显示&#xff0c;有效提升起重机的性能…

python--开心篇--print--多种多样的print输出

文章目录 名言输出绕口令输出《水浒传》中的梁山好汉输出轨道交通充值信息输出对联字符画输出长春地铁1号线运行图模拟12306查询界面模拟企业网站登录界面 名言 print("& "*15) print("& &") print("& …

发现了一个超级好用的上网神器!但是不知道在哪里有卖······随身WiFi好评推荐,随身WiFi好用吗?

这两天到一个小地方出差&#xff0c; 走到一个奶茶店附近&#xff0c; 突然老板打电话说一个紧急文件需要我处理&#xff0c; 说实话有点崩溃&#xff0c; 前不着村后不着店的&#xff0c; 我去哪里找网络办公 辛亏奶茶店的小姐姐听到了&#xff0c; 让我在她店里&#x…

wy的leetcode刷题记录_Day81

wy的leetcode刷题记录_Day81 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-4 前言 目录 wy的leetcode刷题记录_Day81声明前言232. 用栈实现队列题目介绍思路代码收获 138. 随机链表的复制题目介绍思路代码收获 141. 环形链表题…

【Bugs】class path resource [xxx.xml] cannot be opened because it does not exist

报错&#xff1a; 关键报错信息&#xff1a; class path resource [scope.xml] cannot be opened because it does not exist完整报错信息&#xff1a; 2024-03-01 14:26:58 866 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refres…

Ubuntu的apt、apt-get和apt-cache命令

原文&#xff1a;apt 和 apt-get 之间有什么区别&#xff1f; https://aws.amazon.com/cn/compare/the-difference-between-apt-and-apt-get/ 陈拓转载&#xff0c;2023/11/23&#xff0c;添加了举例。 apt 和 apt-get 之间有什么区别&#xff1f; apt 和 apt-get 都是命令行…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(十五)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

【嵌入式移植】8、U-Boot源码分析5—启动过程分析start.S

U-Boot源码分析5—启动过程分析start.S 1、boot0.h2、reset2.1、vectors2.2、ELn2.2.1 EL32.2.2、EL2、EL1 2.3、SMPEN2.3、core errate2.4、lowlevel_init 前面从U-Boot编译的角度分析了其Makefile、链接脚本等&#xff0c;本章开始正式分析U-Boot启动过程 从上一篇文章7、U-…

ClickHouse SQL Reference (四)数据类型

Tuple(T1, T2, …) 元素元组&#xff0c;每个元素都有一个单独的类型。元组必须至少包含一个元素。 元组用于临时列分组。在查询中使用IN表达式时&#xff0c;以及指定lambda函数的某些形式参数时&#xff0c;可以对列进行分组。有关更多信息&#xff0c;请参阅IN操作符和高阶…

u-boot 基础学习:板级配置 Kconfig 的包含

前言 u-boot 与 Linux 内核在嵌入式Linux开发中占有重要的地位&#xff0c;掌握 u-boot 的基础开发&#xff0c;可以大大提升开发能力&#xff0c;并提高开发的效率。 u-boot 下 如何配置 板级的Kconfig 呢&#xff1f;u-boot 下板级的 Kconfig 是怎么包含到 主目录下 Kconfig…

【代码随想录算法训练营Day34】860.柠檬水找零;406.根据身高重建队列;452.用最少数量的箭引爆气球

❇️Day 34 第八章 贪心算法 part04 ✴️今日任务 860.柠檬水找零406.根据身高重建队列452.用最少数量的箭引爆气球 ❇️860.柠檬水找零 本题看上好像挺难&#xff0c;其实挺简单的&#xff0c;大家先尝试自己做一做。题目链接&#xff1a;https://leetcode.cn/problems/lem…

【计算机网络】IO多路转接之poll

文章目录 一、poll函数接口二、socket就绪条件三、poll的优点四、poll的缺点五、poll使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.pollServer.hpp5.main.cc 一、poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int t…

“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA

本文首发:AIWalker https://arxiv.org/abs/2403.00522 https://github.com/Meituan-AutoML/VisionLLaMA 本文概述 大型语言模型构建在基于Transformer的架构之上来处理文本输入, LLaMA 系列模型在众多开源实现中脱颖而出。类似LLaMa的Transformer可以用来处理2D图像吗&#xf…

Python绘制不同形状词云图

目录 1.基本词云图1.1 导入所需库1.2 准备词汇1.3 配置参数并生成词云图1.4 在Python窗口中显示图片1.5 效果展示1.6 完整代码 2. 不同形状词云图2.1 找到自己所需形状图片2.2 利用PS将图片设置为黑白色2.3 在代码中设置背景2.4 效果展示 1.基本词云图 1.1 导入所需库 import…