![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大数据
文章平均质量分 82
最常见的大数据面试题,带你三分钟搞懂,面试再也不虚。
喵呜刷题
来来来,我们一起组队学习!
展开
-
如何排查 Flink Checkpoint 失败问题?
Checkout 在 Flink 中非常重要,其他指标大家也需要多关注。这是 Flink 相关工作中最常出现的问题,值得大家搞明白。如有好的面试知识或技巧期待您的共享!图有点问题,因为都是成功没失败的,尴尬了。方法很多,这里看自己习惯和公司提供的系统。一站式解决面试问题,你可以搜索微信小程序。原创 2023-09-01 08:41:53 · 761 阅读 · 0 评论 -
说说Flink双流join
state数据保存多久,会内存爆炸吗 state自带有ttl机制,可以设置ttl过期策略,触发Flink清理过期state数据。为什么我的双流join时间到了却不触发,一直没有输出 检查一下watermark的设置是否合理,数据时间是否远远大于watermark和窗口时间,导致窗口数据经常为空。实现原理:interval join也是利用Flink的state存储数据,不过此时存在state失效机制ttl,触发数据清理操作。顾名思义,此类方式利用Flink的窗口机制实现双流join。原创 2023-08-31 10:06:52 · 1510 阅读 · 0 评论 -
说说广播流与普通流
根据join 条件,根据key的发到同一个计算节点,如下图类似。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。原创 2023-08-31 10:06:31 · 366 阅读 · 0 评论 -
如何处理 Flink 作业频繁重启问题?
如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。Flink 实现了多种重启策略。原创 2023-08-31 10:06:12 · 1687 阅读 · 0 评论 -
如何处理 Flink 作业中的数据倾斜问题?
由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点。举例:一个 Flink 作业包含 200 个 Task 节点,其中有 199 个节点可以在很短的时间内完成计算。但是有一个节点执行时间远超其他结果,并且随着数据量的持续增加,导致该计算节点挂掉,从而整个任务失败重启。我们可以在 Flink 的管理界面中看到任务的某一个 Task 数据量远超其他节点。大数据框架的特性不怕数据大,怕数据倾斜。jobs数比较多的作业运行效率相对比较低,如子查询比较多。原创 2023-08-31 10:05:53 · 1820 阅读 · 0 评论 -
Watermark 是怎么生成和传递的?
Watermark 本质是时间戳,与业务数据一样无差别地传递下去,目的是衡量事件时间的进度(通知 Flink 触发事件时间相关的操作,例如窗口)。Watermark 是一个时间戳, 它表示小于该时间戳的事件都已经到达了。Watermark 一般情况在源位置产生(也可以在流图中的其它节点产生), 通过流图节点传播。Watermark 也是 StreamElement, 和普通数据一起在算子之间传递。原创 2023-08-31 10:05:35 · 547 阅读 · 0 评论 -
Flink的checkpoint是怎么实现的?
Checkpoint容错机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保证应用流图状态的一致性。Flink的Checkpoint机制原理来自“Chandy-Lamport algorithm”算法。原创 2023-08-31 10:05:07 · 1693 阅读 · 0 评论 -
说说Flink on yarn的启动流程
当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图。如有好的面试知识或技巧期待您的共享!原创 2023-08-31 10:04:43 · 1447 阅读 · 0 评论 -
Spark与Flink的区别
2、Flink 根据用户提交的代码生成 StreamGraph,经过优化生成 JobGraph,然后提交给 JobManager进行处理,JobManager 会根据 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 调度最核心的数据结构,JobManager 根据 ExecutionGraph 对 Job 进行调度。1、spark是基于微批的,而且流水线优化做的很好,所以说他的吞入量是最大的,但是付出了延迟的代价,它的延迟是秒级;原创 2023-08-31 10:03:48 · 591 阅读 · 0 评论 -
hadoop解决数据倾斜的方法
使用combinner合并,combinner是在map阶段,reduce之前的一个中间阶段,在这个阶段可以选择性的把大量的相同key数据先进行一个合并,可以看做是local reduce,然后再交给reduce来处理。最容易造成的结果就是大量相同key被partition到一个分区,从而一个reduce执行了大量的工作,而如果我们增加了reduce的个数,这种情况相对来说会减轻很多,毕竟计算的节点多了,就算工作量还是不均匀的,那也要小很多。第二次mr对把第一次mr输出的数据的key去掉前缀,在聚合。原创 2023-08-31 10:03:28 · 860 阅读 · 0 评论 -
对比Flink、Storm、Spark Streaming 的反压机制
Flink 如何处理反压?Storm反压机制 Storm 在每一个 Bolt 都会有一个监测反压的线程(Backpressure Thread),这个线程一但检测到 Bolt 里的接收队列(recv queue)出现了严重阻塞就会把这个情况写到 ZooKeeper 里,ZooKeeper 会一直被 Spout 监听,监听到有反压的情况就会停止发送。因此,通过这样的方式匹配上下游的发送接收速率。Spark streaming反压机制组件 RateController 监听负责监听“OnBatchComplet原创 2023-08-30 15:19:21 · 1077 阅读 · 0 评论 -
Flink 如何定位反压节点?
并且总结上游 Task outPoolUsage 与 floatingBuffersUsage 、 exclusiveBuffersUsage 的关系,进一步的分析一个 Subtask 和其上游 Subtask 的反压情况。注意:反压有时是短暂的且影响不大,比如来自某个 channel 的短暂网络延迟或者 TaskManager 的正常 GC,这种情况下可以不用处理。② 如果一个 Subtask 的 outPoolUsage 是高,通常是被下游 Task 所影响,所以可以排查它本身是反压根源的可能性。原创 2023-08-30 15:25:13 · 1943 阅读 · 0 评论 -
flink维度表关联
实时查询维表是指用户在Flink 的Map算子中直接访问外部数据库,比如用 MySQL 来进行关联,这种方式是同步方式,数据保证是最新的。最后,为了保证连接及时关闭和释放,一定要在最后的 close 方式释放连接,否则会将 MySQL 的连接数打满导致任务失败。当我们的系统启动时,就将维度表数据全部加载到内存中,然后数据在内存中进行关联,不需要直接访问外部数据库。如果维表的数据比较大,无法一次性全部加载到内存中,可以使用LRU策略加载维表数据。对计算节点的内存消耗很高,所以不能适用于数量很大的维度表。原创 2023-08-30 16:17:36 · 1910 阅读 · 0 评论 -
如何处理生产环境中的数据倾斜问题?
将SQL 拆成了内外两层,第一层通过随机打散 100 份的方式减少数据热点,当然这个打散的方式可以根据业务灵活指定。业务上要尽量避免热点 key 的设计,例如我们可以把北京、上海等热点城市分成不同的区域,并进行单独处理;技术上大量使用了 KeyBy、GroupBy 等操作,错误的使用了分组 Key,人为产生数据热点。业务上有严重的数据热点,比如滴滴打车的订单数据中北京、上海等几个城市的订单量远远超过其他地区;部分节点出现OOM异常,是因为大量的数据集中在某个节点上,导致该节点内存被爆,任务失败重启。原创 2023-08-30 16:19:11 · 556 阅读 · 0 评论 -
说说FLINK细粒度滑动窗口如何处理
接着遍历所有窗口,将该元素加入对应的窗口状态(即缓存)中,并根据触发器返回的TriggerResult决定是输出(fire)还是清除(purge)窗口的内容,emitWindowContents()方法会调用用户函数。在窗口大小size是步长slide的2倍的情况下,(几乎)每个DataStream元素都会处于2个窗口内。这段代码就不难理解了,先调用getWindowStartWithOffset()方法根据元素的时间戳计算出其窗口的起点时间戳,再逐次循环向后滑动,产生size / slide个窗口。原创 2023-08-30 16:20:10 · 1183 阅读 · 0 评论 -
说说Flink中的State
Broadcast State具有Broadcast流的特殊属性,它是一种小数据状态广播向其它流的形式,从而避免大数据流量的传输。这来还存在异构序列化实现的演进问题,因为存在一种情况,任务在恢复状态数据时,会由新的序列化引入。如果出现新的序列化实现无法读取老的状态数据,那么需要做一个兼容性的改动,进行状态迁移,或者先用老的序列化实现读取老状态,然后新的状态用新的序列化方式写出。State在Flink任务的运行时保存了非常重要的数据,明白如何去更好地使用State将会对我们了解,恢复任务有着很大的帮助。原创 2023-08-30 16:20:42 · 1709 阅读 · 0 评论 -
说说Flink运行模式
与Per-Job-Cluster的区别:就是Application Mode下, 用户的main函数式在集群中执行的,并且当一个application中有多个job的话,per-job模式则是一个job对应一个yarn中的application,而Application Mode则这个application中对应多个job。一个Job会对应一个Flink集群,每提交一个作业会根据自身的情况,都会单独向yarn申请资源,直到作业执行完成,一个作业的失败与否并不会影响下一个作业的正常提交和运行。原创 2023-08-30 16:23:24 · 1574 阅读 · 0 评论 -
Flink SQL你用了吗?
在以前,业务上需要定义特殊的逻辑来解析 CDC 数据,并把它转换成一般的 Insert-only 数据,后续的处理逻辑需要考虑到这种特殊性,这种 work-around 的方式无疑给业务上带来了不必要的复杂性。Flink SQL很多时候在测试的时候很好用,在单纯实时计算的时候也非常不错,如果你要做实时数仓,其实并不一定是最好的选择,能高效低成本的打通离线数据和实时数据才是王道。问题是慢,延迟大,并且 Ad-hoc 分析延迟也比较大,因为前面的数据入库,或者前面的调度的 ETL 会有很大的延迟。原创 2023-08-31 07:16:07 · 1899 阅读 · 0 评论 -
说说你了解的 CDC
CDC,Change Data Capture,变更数据获取的简称,使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游,供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。使用flink sql进行数据同步,可以将数据从一个数据同步到其他的地方,比如mysql、elasticsearch等。可以在源数据库上实时的物化一个聚合视图因为只是增量同步,所以可以实时的低延迟的同步数据使用EventTime join 一个temporal表以便可以获取准确的结果。原创 2023-08-31 07:15:47 · 501 阅读 · 0 评论 -
说说大表关联小表
left join是left outer join的缩写,所以作用是一样的。另外在SQL里没有区分大小写,也就是left join和LEFT JOIN都是可以的。MySQL 中一般使用 left outer join的左表必须是。如有好的面试知识或技巧期待您的共享!一站式解决面试问题,你可以搜索微信小程序。原创 2023-08-31 07:15:23 · 842 阅读 · 0 评论 -
说说Lambda架构
在过去Lambda数据架构成为每一个公司大数据平台必备的架构,它解决了一个公司大数据批量离线处理和实时数据处理的需求。一个典型的Lambda架构如下:数据从底层的数据源开始,经过各种各样的格式进入大数据平台,在大数据平台中经过Kafka、Flume等数据组件进行收集,然后分成两条线进行计算。一条线是进入流式计算平台(例如 Storm、Flink或者Spark Streaming),去计算实时的一些指标;原创 2023-08-31 07:15:06 · 1564 阅读 · 0 评论 -
说说Kappa架构
当流任务发生代码变动时,或者需要回溯计算时,原先的Job N保持不动,先新启动一个作业Job N+1,从消息队列中获取历史数据,进行计算,计算结果存储到新的数据表中。而流处理集群,一般选择Flink,因为Flink支持流批一体的处理方式,并且对SQL的支持率逐渐提高,所以可以尽量减少流处理和批处理逻辑代码不一致的情况。对于实时数仓而言,Lmabda架构有很明显的不足,首先同时维护两套系统,资源占用率高,其次这两套系统的数据处理逻辑相同,代码重复开发。Kappa架构是真正意义上的流批一体的处理方式。原创 2023-08-31 07:13:43 · 955 阅读 · 0 评论 -
说说构建流批一体准实时数仓
传统的 Hive Table 只支持按照批的方式进行读取计算,但是我们现在可以使用流的方式来监控 Hive 里面的分区 / 文件生成,也就是每一条数据过来,都可以实时的进行消费计算,它也是完全复用 Flink Streaming SQL 的方式,可以和 HBase、MySQL、Hive Table 进行 Join 操作,最后再通过 FileWriter 实时写入到 Hive Table 中。分析了元数据和计算引擎的统一,更进一步,是否能统一实时和离线的数据,避免数据的不一致,避免数据的重复存储和重复计算。原创 2023-08-30 17:10:26 · 501 阅读 · 0 评论 -
说说Omega架构
在谈我们的解法的时候,必须要先提ECS的设计模式。简单的说,Entity、Component、System分别代表了三类模型。实体(Entity):实体是一个普通的对象。通常,它只包含了一个独一无二的ID值,用来标记它是一个独立的对象。组件(Component):对象一个方面的数据,以及对象如何和世界进行交互。用来标记实体是否需要进行这一方面的处理,通常使用结构体,类或关联数组实现。系统(System):每个系统不间断地运行(就像每个系统运行在自己的私有线程上),处理标记使用了该系统处理的组件的每个实体。原创 2023-08-31 07:12:24 · 579 阅读 · 0 评论 -
Flink 任务出现很高的延迟,你会如何入手解决类似问题?
当数据倾斜出现时,通常是简单地使用类似 KeyBy 等分组聚合函数导致的,需要用户将热点 Key 进行预处理,降低或者消除热点 Key 的影。Flink 的 TaskManager 会每隔 50 ms 触发一次反压状态监测,共监测 100 次,并将计算结果反馈给 JobManager,最后由 JobManager 进行计算反压的比例,然后进行展示。GC:不合理的设置 TaskManager 的垃圾回收参数会导致严重的 GC 问题,我们可以通过。中,可以看到 Flink 的哪个算子和 task 出现了反压;原创 2023-08-30 15:25:34 · 566 阅读 · 0 评论 -
Flink 如何处理反压?
反压通常是从某个节点传导至数据源并降低数据源(比如 Kafka consumer)的摄入速率。反压意味着数据管道中某个节点成为瓶颈,处理速率跟不上上游发送数据的速率,而需要对上游进行限速。原创 2023-09-01 08:41:13 · 942 阅读 · 0 评论