Flink的checkpoint解读

欢迎关注今日头条号、微信公众号、知乎号仰望夜空一万次

随意聊聊并记录从小城市到上海工作生活的所思所想。

不去记录,有些事情都好像没有发生过。

Flink 中的每个方法或算子都能够是有状态的。为了让状态容错,Flink 需要为状态添加 checkpoint(检查点)。

Flink 的 checkpoint 机制前提条件:

  • 一个能够回放一段时间内数据的持久化数据源
  • 存放状态的持久化存储

 

什么是 Checkpoint

Checkpoint 是从 source 触发到下游所有节点完成的一次全局操作。

 

什么是 State

State 其实就是 Checkpoint 所做的主要持久化备份的主要数据

 

State分类

keyed state

对于 keyed state,有两个特点:

  • 只能应用于 KeyedStream 的函数与操作中,例如 Keyed UDF, window state
  • keyed state 是已经分区 / 划分好的,每一个 key 只能属于某一个 keyed state

 

 operator state

  • 又称为 non-keyed state,每一个 operator state 都仅与一个 operator 的实例绑定。
  • 常见的 operator state 是 source state,例如记录当前 source 的 offset
  • 运算符状态(或非键控状态)是绑定到一个并行运算符实例的状态。 Kafka连接器是在Flink中使用运算符状态的一个很好的例子。Kafka消费者的每个并行实例都维护一个主题分区和偏移量的映射作为其运算符状态。

 

数据结构对不同State的支持

  •  ListState<T>和BroadcastState<K,V>支持operator state
  • ValueState<T>,MapState<K,V>,ListState<T>,ReducingState<T>,AggregatingState<IN,OUT>支持Keyed State.

 

Statebackend 的分类

下图阐释了目前 Flink 内置的三类 state backend,其中MemoryStateBackendFsStateBackend在运行时都是存储在 java heap 中的,只有在执行 Checkpoint 时,FsStateBackend才会将数据以文件格式持久化到远程存储上。而RocksDBStateBackend则借用了 RocksDB(内存磁盘混合的 LSM DB)对 state 进行存储。

 

默认情况下,状态是保持在 TaskManagers 的内存中,checkpoint 保存在 JobManager 的内存中。为了合适地持久化大体量状态, Flink 支持各种各样的途径去存储 checkpoint 状态到其他的 state backends 上。通过 StreamExecutionEnvironment.setStateBackend(…) 来配置所选的 state backends。

 

官网WordCount例子中,对状态的操作

env.fromElements(String ...)
其中使用FromElementsFunction类,作为SourceFunction,FromElementsFunction类同时实现了CheckpointedFunction接口,其中使用类型为ListState的Operaor state。

 

@Public
public interface CheckpointedFunction {
    void snapshotState(FunctionSnapshotContext context) throws Exception;


   void initializeState(FunctionInitializationContext context) throws Exception;
}

 

word count 的 sum 函数调用StreamGroupedReduce类操作 keyed state ,数据结构为ValueState。

 

参考

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值