flink要点


提示:此文为翻译flink官网或其他博主写的内容(非原创),觉得写的不错将其摘录下来

一、Checkpoint相关

1).Checkpoint保留

Checkpoint 在默认的情况下仅用于恢复失败的作业,并不保留,当程序取消时 checkpoint 就会被删除。当然,你可以通过配置来保留 checkpoint,这些被保留的 checkpoint
在作业失败或取消时不会被清除。这样,你就可以使用该 checkpoint 来恢复失败的作业。

CheckpointConfig config = env.getCheckpointConfig();
config.setExternalizedCheckpointCleanup(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);

ExternalizedCheckpointCleanup 配置项定义了当作业取消时,对作业 checkpoint 的操作:

  • ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:当作业取消时,保留作业的 checkpoint。注意,这种情况下,需要手动清除该作业保留的 checkpoint。
  • ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION:当作业取消时,删除作业的 checkpoint。仅当作业失败时,作业的 checkpoint 才会被保留。

2).checkpoint目录结构

checkpoint(savepoints 相似) 由元数据文件、数据文件(与 state backend 相关)组成。可通过配置文件中 “state.checkpoints.dir” 配置项来指定元数据文件和数据文件的存储路径,另外也可以在代码中针对单个作业特别指定该配置项。

当前的 checkpoint 目录结构(由 FLINK-8531 引入)如下所示:

/user-defined-checkpoint-dir
    /{job-id}
        |
        + --shared/
        + --taskowned/
        + --chk-1/
        + --chk-2/
        + --chk-3/
        ...     

其中 SHARED 目录保存了可能被多个 checkpoint 引用的文件,TASKOWNED 保存了不会被 JobManager 删除的文件,EXCLUSIVE 则保存那些仅被单个 checkpoint 引用的文件。

  • 通过配置文件全局配置(checkpoint存哪里)
state.checkpoints.dir: hdfs:///checkpoints/
  • 创建 state backend 对单个作业进行配置(datastream代码举例。job参数配置也支持)
env.setStateBackend(new RocksDBStateBackend("hdfs:///checkpoints-data/"));
  • 从保留的 checkpoint 中恢复状态
    (与 savepoint 一样) 作业可以从 checkpoint 的元数据文件恢复运行(savepoint恢复指南)。注意,如果元数据文件中信息不充分,那么 jobmanager 就需要使用相关的数据文件来恢复作业.
$ bin/flink run -s :checkpointMetaDataPath [:runArgs]

二、flink Unaligned checkpoints

Flink 的 Unaligned checkpoints 是一种检查点机制,旨在优化 Flink 流处理中的状态一致性检查和恢复过程。相对于传统的 Aligned checkpoints,Unaligned checkpoints 提供了更高的效率和更低的处理延迟。

Aligned checkpoints 的限制

在解释 Unaligned checkpoints 之前,了解 Aligned checkpoints 的工作原理很重要。在 Flink 的 Aligned checkpoints 机制中,当触发检查点操作时,所有并行任务都会暂停当前的处理,并等待所有上游数据的检查点栅栏(Checkpoint Barrier)到达。这样可以确保检查点时刻所有任务的状态是一致的。然而,这种方式会导致处理延迟,特别是在遇到慢节点或数据倾斜时。

Unaligned checkpoints 的工作原理

相比之下,Unaligned checkpoints 允许数据继续在检查点栅栏到达不同算子时流动,不需要等待所有数据的栅栏都到齐。这意味着可以在确保状态一致性的同时,减少因等待对齐而产生的延迟。

  • 1.数据流动性:在检查点进行时,数据可以继续移动,算子不需要等待所有上游任务的检查点栅栏。
  • 2.缓存非对齐数据:为了保证一致性,已经接收但尚未处理的数据(这些数据在检查点栅栏之后到达)会被缓存起来。检查点完成后,这些数据会继续被处理。
  • 3.异步快照:状态的快照是异步进行的,这进一步减少了对处理延迟的影响。

Unaligned checkpoints 的好处

  • 降低延迟:由于不需要所有数据的检查点栅栏对齐,所以可以显著减少因检查点而引起的延迟。
  • 提高吞吐量:减少等待时间使得系统的吞吐量得到提升。
  • 加强容错性:即使在出现网络延迟或节点故障的情况下,也能更快地完成检查点,提高了系统的容错能力。
    Unaligned checkpoints 是 Flink 在状态一致性和高性能之间寻找的平衡点,非常适合需要处理大规模数据流且对延迟敏感的应用。

三、flink Timer

在 Flink 中,Timer(定时器)是处理时间相关逻辑的核心机制之一,尤其适用于需要在特定时间点执行操作的场景。Flink 中的 Timer 主要用于以下几种场景:

  1. 窗口操作:在基于时间的窗口操作中,Timer 用于触发窗口的计算与关闭。例如,在一个滚动时间窗口中,Timer 会在窗口结束时触发,对窗口内的数据进行聚合运算。

  2. 状态过期管理:在状态管理中,Timer 可以用于清理旧的状态信息,从而防止状态无限期增长导致的内存溢出。通过设定一个定时器,可以在特定时间后清除或更新某些状态。

  3. 复杂事件处理(CEP):在复杂事件处理应用中,Timer 用于实现基于时间的模式匹配,通过在指定时间后触发,来检查事件模式是否满足条件。

  4. 延迟事件处理:在处理含有延迟的事件流时,Timer 可以帮助实现对延迟事件的处理逻辑。例如,如果某个事件没有在预定时间内到达,可以通过设置 Timer 在一段延迟时间后触发一个操作,如发送报警信息。

  5. 时间触发功能:对于需要周期性执行的任务,比如每隔一段时间把当前的处理结果输出到外部系统,Timer 可提供精确的时间控制。

Flink 支持两种类型的 Timer:

  • 处理时间(Processing Time)Timer:基于处理时间设置 Timer,它触发的操作与事件进入系统的时间相关,而与事件本身的时间戳无关。
  • 事件时间(Event Time)Timer:基于事件时间设置 Timer,它触发的操作基于事件携带的时间戳,更适合那些对时间准确性有严格要求的应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值