当前位置:   article > 正文

Flink 常考面试题_link的watermark水印和时间语义面试题

link的watermark水印和时间语义面试题

Flink 与 Storm 的对比

在这里插入图片描述
其余还有高可用方面的一些功能:CheckPoint 机制保证容错 && 吞吐也比 Storm 要高很多

WaterMark 的理解

主要作用是:用来解决乱序,延迟事件。因为对于 late element,我们又不能无限期的等下去,必须要有个机制来保证一个特定的时间后,必须触发 window 去进行计算了。这个特别的机制,就是watermark。

三个时间概念

Flink 中的时间概念

机制特征

  • Watermark 用于标记 Event-Time 的前进过程
  • Watermark 跟随 DataStream Event-Time 变动,并自身携带 TimeStamp
  • 表示比 watermark 更早(更老) 的事件都已经到达(没有比水位线更低的数据)
  • 通常基于 watermark 来进行窗口触发计算的判断

更新的原理

  • maxOutOfOrderness 表示多长时间范围内是有效的数据

基于 event-time 时间更新。如果 后面的 event-time 比前面的 元素大,那么就更新 Watermark。否则就不更新。

在这里插入图片描述
当然,在水位线之后,还会有更迟的迟到事件的到达,不会纳为窗口数据进行计算。这种 Flink 是怎么解决的呐?
在这里插入图片描述

比watermark更晚的数据如何解决

  1. 直接丢弃(默认)
  2. allowedLateness 指定允许数据延迟的时间(本质上应该是延长了 watermark 的时间范围)
  3. sideOutputLateData 收集迟到的数据(即旁路输出)

参考:一篇文章搞懂 Flink 的 watermark 机制

重启策略

有几种:

  1. 固定延迟重启策略(Fixed Delay Restart Strategy): 固定延迟重启策略尝试给定次数重新启动作业。如果超过最大尝试次数,则作业最终会失败。在两次连续重启尝试之间,重启策略等待一段固定的时间。
    举例:如何在Flink Job中设置固定延迟重启策略。如果发生故障,系统会尝试重新启动作业3次,并在连续重启尝试之间等待10秒
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // 尝试重启的次数
  Time.of(10, TimeUnit.SECONDS) // 延时
));
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 故障率重启策略(Failure Rate Restart Strategy):故障率重启策略在故障发生之后重启作业,但是当故障率(每个时间间隔发生故障的次数)超过设定的限制时,作业会最终失败。 在连续的两次重启尝试之间,重启策略等待一段固定长度的时间。
    举例:延迟 10s 重启作业,没有最大启动次数限制,但是5min之内不能重启超过3次,如果超过就不再重启。
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.failureRateRestart(
  3, // 每个时间间隔的最大故障次数
  Time.of(5, TimeUnit.MINUTES), // 测量故障率的时间间隔
  Time.of(10, TimeUnit.SECONDS) // 延时
));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 没有重启策略(No Restart Strategy)
  2. 后背重启策略(Fallback Restart Strategy)
    使用集群定义的重启策略(即配置文件定义的)。 这对于启用了 checkpoint 的流处理程序很有帮助。 如果没有定义其他重启策略,默认选择固定延时重启策略,默认最大启动次数是Integer.MAX_VALUE

如何设置:

配置文件定义

通过 Flink 的配置文件 flink-conf.yaml 来设置默认的重启策略。配置参数 restart-strategy 定义了采取何种策略。

  • 如果没有启用 checkpoint,不配置restart 策略的话,就采用“不重启”策略
  • 如果启用了 checkpoint 且没有配置重启策略,那么就采用固定延时重启策略, 此时最大尝试重启次数由 Integer.MAX_VALUE 参数设置。

作业自己设置

除了定义默认的重启策略以外,还可以为每个 Flink 作业单独定义重启策略。 这个重启策略通过在程序中的 ExecutionEnvironment 对象上调用 setRestartStrategy 方法来设置。 当然,对于 StreamExecutionEnvironment 也同样适用。

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(
  3, // 尝试重启的次数
  Time.of(10, TimeUnit.SECONDS) // 延时
));
  • 1
  • 2
  • 3
  • 4
  • 5

exactly-once 的保证

Flink Exactly-Once 投递实现浅析

Flink state 有几种状态

Flink 状态管理与容错

CheckPoint 与 SavePoint(实现原理&区别)

Flink 状态管理与容错

参考

Flink面试题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/732394
推荐阅读
相关标签
  

闽ICP备14008679号