rocksdb原理_Flink原理—神秘的状态

本文详细介绍了Flink中的状态管理,包括State的定义、作用和State Backend的选择,如MemoryStateBackend、FsStateBackend和RocksDBStateBackend。接着讨论了Checkpoint的原理、配置和优化,特别是非对齐Checkpoint的利弊。同时,解释了Savepoint的意义和触发方式,以及为何在程序逻辑修改后可能导致Savepoint不可用。最后,阐述了Flink的容错机制,如何结合流重播和Checkpoint实现故障恢复。
摘要由CSDN通过智能技术生成
3f1c845fce931338b75f8a20d4834242.png

十万个为什么

  • state、checkpoint、savepoint 之间有什么关系

  • 在Flink1.11 中对状态相关的优化有哪些

  • state、checkpoint 、savepoint 存在的意义是什么

  • checkpoint 如何触发、如何设置

  • savepoint和checkpoint的关系

5ccbff364a3a58bcc3aed48271fa8094.png

State

d5967909a6da63ed81fe1cd94e3ef747.png

21762fb1fe71cfba0ccc5af22ae5e7e2.png

1、定义:

与时间相关的任务内部数据的快照

21762fb1fe71cfba0ccc5af22ae5e7e2.png

2、作用:

  • 每次计算需要基于上一次计算的结果,故通过state将每次计算的中间结果进行持久化

  • 出现错误需要从成功的检查点进行State的恢复

  • 增量计算,Failover这些机制都需要state的支撑。

5ccbff364a3a58bcc3aed48271fa8094.png

State Backends

d5967909a6da63ed81fe1cd94e3ef747.png

21762fb1fe71cfba0ccc5af22ae5e7e2.png

1、作用:

决定状态的存储格式以及状态在CheckPoint时持久化格式和方式

21762fb1fe71cfba0ccc5af22ae5e7e2.png

2、分类:

(1)MemoryStateBackend【全量快照】:

  • 以Java对象的形式存储在堆上

  • 适用于开发调试

(2)FsStateBackend【全量快照】:

  • 需配置 URL("hdfs://md:4010/checkpoints" 或 "file:///checkpoints")

  • 正在运行中的状态数据保存在 TaskManager 的内存中,故受制于GC

          CheckPoint 时,将状态快照写入到配置的文件系统目录中。

          少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其写入到 CheckPoint 的元数据文件中)

  • 异步快照可防止 CheckPoint 写状态时对数据处理造成阻塞。异步快照默认是开启的

new FsStateBackend(path, false); //可通过编码关闭

          FsStateBackend 适用场景:状态较大、窗口较长的 Job和 所有高可用的场景。

(3)RocksDBStateBackend【全量/异步快照】:

a、原理:

  • 需配置 URL("hdfs://md:4010/checkpoints" 或 "file:///checkpoints")

  • 正在运行中的状态数据保存在 RocksDB中,RocksDB默认将数据存储在 TaskManager 的数据目录,故RocksDB 的状态量仅受本地磁盘大小的限制。CheckPoint 时,整个 RocksDB被 checkpoint 到配置的文件系统目录中。少量的元数据信息存储到 JobManager 的内存中(高可用模式下,将其存储到 CheckPoint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink是一个开源的分布式流处理框架,它的运行原理是将数据流分成不同的子任务,这些子任务会在不同的计算节点上并行执行。Flink将数据流看作是一个无限的事件流,每当有新的事件到来时,Flink会将这些事件收集起来,交给对应的算子进行处理,并将结果传递给下一个算子。Flink的运行原理主要包括以下几个方面: 1. 数据流划分:Flink会将数据流划分为多个子任务,并将这些子任务分配到不同的计算节点上。 2. 算子执行:每个子任务会在对应的计算节点上并行执行,数据会经过一系列的算子进行处理,每个算子都会将处理后的数据再次输出到下一个算子。 3. 状态管理:Flink支持对算子状态的管理,可以将算子的状态存储在内存或外部存储中,以便在出现故障时进行恢复。 4. 检查点:Flink会定期生成检查点,用于保存算子的状态以及数据流的位置信息,以便在出现故障时进行恢复。 5. 任务协调:Flink会对所有子任务进行统一的协调和调度,确保数据流的正确处理。 在实际应用中,为了保证Flink的性能,需要进行性能优化。常见的性能优化包括: 1. 调整并行度:适当调整算子的并行度可以提高Flink的性能。 2. 减少数据倾斜:数据倾斜会导致某些节点的负载过高,可以通过数据重分区等方式来减少数据倾斜。 3. 使用状态后端:选择合适的状态后端可以提高Flink的性能,常用的状态后端包括内存和RocksDB。 4. 减少网络开销:减少网络开销可以提高Flink的性能,可以通过调整数据分区、使用压缩算法等方式来减少网络开销。 5. 避免不必要的计算:避免不必要的计算可以提高Flink的性能,可以通过过滤掉不需要处理的数据等方式来避免不必要的计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值