大数据学习之状态+checkpoint

状态

  1. flink用于保存之前计算结果的机制
  2. flink会为每一个key保存一个状态

  3. 常用的sum(需要保存之前的计算结果) window(需要保存一段时间内的数据)内部都是有状态的

  4. flink也提供了几种查用的状态类
    1. valueState: 单值状态,为每一个key保存一个值,可以是任何类型,必须可以序列化
    2. mapState: kv格式的状态,为每一个key保存一个kv格式的状态
    3. listState: 集合状态,为每一个key保存一个集合状态,集合中可以保存多个元素
    4. reducingState/AggregatingState:聚合状态,为每一个key保存一个值,再定义状态时需要一个聚合函数
  5. flink的状态和普通变量的区别
    1. 普通变量是保存再flink的内存中的,如果flink任务执行失败,变量的数据会丢失
    2. flink的状态是一个特殊的变量,状态中的数据会被checkpoint持久化到hdfs中, 如果任务执行失败,重启任务,可以恢复状态
  6. 状态后端,用于保存状态的位置
    1. HashMapStateBackend:

      1. 将flink的状态先保存TaskManager的内存中,在触发checkpoint的时候将taskmanager中的状态再持久化到hdfs中

      2. 可以直接使用

        env.setStateBackend(new HashMapStateBackend())
      3. RocksDS是一个本地的轻量级的数据库,数据在磁盘上

      4. 在启动lfink任务的时候会在每一个taskManager所在的节点启动一个rocksDB进程

      5. flink的状态会先保存在rocksDb数据库中,当触发checkpoint的时候将数据库中的状态持久化到hdfs中

      6. 可以支持增量快照

      7. 使用rocksDb状态后端需要带入依赖

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-statebackend-rocksdb</artifactId>
            <version>1.15.0</version>
        </dependency>
        
        8、使用方式
        env.setStateBackend(new EmbeddedRocksDBStateBackend(true))
        

checkpoint

  1. checkpoint是flink用于持久化flink状态的机制

  2. flink会定时将flink计算的状态持久化到hdfs中

  3. 开启checkpint的方法

    1. 在代码中开启- 每一个代码单独开启,优先级最高

      // 每 1000ms 开始一次 checkpoint
      env.enableCheckpointing(1000)
      // 高级选项:
      // 设置模式为精确一次 (这是默认值)
      env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
      // 确认 checkpoints 之间的时间会进行 500 ms
      env.getCheckpointConfig.setMinPauseBetweenCheckpoints(500)
      // Checkpoint 必须在一分钟内完成,否则就会被抛弃
      env.getCheckpointConfig.setCheckpointTimeout(60000)
      // 允许两个连续的 checkpoint 错误
      env.getCheckpointConfig.setTolerableCheckpointFailureNumber(2)
      // 同一时间只允许一个 checkpoint 进行
      env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)
      // 使用 externalized checkpoints,这样 checkpoint 在作业取消后仍就会被保留
      //RETAIN_ON_CANCELLATION: 当任务取消时保留checkpoint
      env.getCheckpointConfig.setExternalizedCheckpointCleanup(
      ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
      //指定状态后端
      //EmbeddedRocksDBStateBackend eocksDb状态后端
      env.setStateBackend(new EmbeddedRocksDBStateBackend(true))
      //将状态保存到hdfs中,在触发checkpoint的时候将状态持久化到hdfs中
      env.getCheckpointConfig.setCheckpointStorage("hdfs://master:9000/flink/checkpoint")
      
      
    2. 在flink的集群的配置文件中同意开启-- flink新版才有

      vim flink-conf.yaml

      execution.checkpointing.interval: 3min
      execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION
      execution.checkpointing.max-concurrent-checkpoints: 1
      execution.checkpointing.min-pause: 0
      execution.checkpointing.mode: EXACTLY_ONCE
      execution.checkpointing.timeout: 10min
      execution.checkpointing.tolerable-failed-checkpoints: 0
      state.backend: rocksdb
      state.checkpoints.dir: hdfs://master:9000/flink/checkpoint
      
  4. 从checkpoint恢复任务

    1. 可以在网页中指定checkpint的路径恢复,路径需要带上前缀hdfs://master:9000

      hdfs://master:9000/flink/checkpoint/11edbec21742ceddebbb90f3e49f24b4/chk-35
      
    2. 也可以在命令行中重新提交任务,指定恢复任务的位置, 需要先上传jarr包

      # -s 恢复任务的位置
      flink run -t yarn-session -Dyarn.application.id=application_1658546198162_0005  -c com.shujia.flink.core.Demo15RocksDB -s hdfs://master:9000/flink/checkpoint/11edbec21742ceddebbb90f3e49f24b4/chk-35 flink-1.0.jar
      

###以下是一些官网地址:
1,了解有状态的API:
https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/dev/datastream/fault-tolerance/state/

2,状态后端
https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/ops/state/state_backends/

3,有状态流处理
https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/concepts/stateful-stream-processing/

4,及时流处理
https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/concepts/time/

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值