flink checkpoint和savepoint的实践使用

目录

 

简述

checkpoint的使用

步骤2: 修改代码

svaepoint 的使用

 SavePoint 剖析

2: 触发 Savepoint

3:从 Savepoint 恢复


简述

 

     从概念上讲, Flink 的 Savepoint 与 Checkpoint 的不同之处类似于传统数据库中的备份与恢复日志之间的差异 Checkpoint 的主要目的是为意外失败的作业提供恢复机制。 Checkpoint 的生命周期由 Flink 管理,即 Flink 创建,管理和删除 Checkpoint - 无需用户交互。 作为一种恢复和定期触发的方法,Checkpoint 实现有两个设计目标:i)轻量级创建和 ii)尽可能快地恢复。 可能会利用某些特定的属性来达到这个,例如, 工作代码在执行尝试之间不会改变。 在用户终止作业后,通常会删除 Checkpoint(除非明确配置为保留的 Checkpoint)。

    与此相反、Savepoint 由用户创建,拥有和删除。 他们的用例是计划的,手动备份和恢复。 例如,升级 Flink 版本,调整用户逻辑,改变并行度,以及进行红蓝部署等。 当然,Savepoint 必须在作业停止后继续存在。 从概念上讲,Savepoint 的生成,恢复成本可能更高一些,Savepoint 更多地关注可移植性和对前面提到的作业更改的支持。

    除去这些概念上的差异,Checkpoint 和 Savepoint 的当前实现基本上使用相同的代码并生成相同的格式。然而,目前有一个例外,我们可能会在未来引入更多的差异。例外情况是使用 RocksDB 状态后端的增量 Checkpoint。他们使用了一些 RocksDB 内部格式,而不是 Flink 的本机 Savepoint 格式。这使他们成为了与 Savepoint 相比,更轻量级的 Checkpoint 机制的第一个实例。

 

官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/ops/state/savepoints.html

 

checkpoint的使用

环境: flink job 采用的是on yarn模式

state.backend 存储和检查点的后台存储。可选值为rocksdb filesystem hdfs

state.checkpoints.dir 保存检查点目录

state.backend.incremental 增量存储

state.checkpoints.num-retained 保留最近检查点的数量

注释:  hdfs://haservice/flink-checkpoints 是dfs.nameservices,  我的hdfs是HA模式, 所有不需要添加端口

步骤2: 修改代码

env.enableCheckpointing(5000)

env.getCheckpointConfig.setCheckpointTimeout(60000)

在使用的过程中遇到的问题

问题1:

Caused by: org.apache.flink.runtime.rest.util.RestClientException: [Internal server error., <Exception on server side:

akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://flink/user/dispatcher#-401211917]] after [10000 ms]. Message of type [org.apache.flink.runtime.rpc.messages.LocalFencedMessage]. A typical reason for `AskTimeoutException` is that the recipient actor didn't send a reply.

解决方案: 在flink-conf.yaml添加如下内容

akka.ask.timeout: 60s

web.timeout: 120000

问题2: 

org.apache.kafka.common.KafkaException: Unexpected error in InitProducerIdResponse; The transaction timeout is larger than the maximum value allowed by the broker (as configured by transaction.max.timeout.ms).

解决方案:

  参考: https://www.cnblogs.com/lillcol/p/12092869.html

flink代码 的sink 添加如下:

问题3:

采用RichSourceFunction从Hbase获取维表数据, 但是只获取一次, 成功获取后变成了 FINISHED     状态, checkpoint 就不能继续执行, 一直停留

解决方案:

在KeyedBroadcastProcessFunction的open方法中获取hbase的配置信息

如下:

 

svaepoint 的使用

 

1 全局一致性快照

Flink通过Savepoint功能可以做到程序升级后,继续从升级前的那个点开始执行计算,保证数据不中断

全局,一致性快照。可以保存数据源offset,operator操作状态等信息

可以从应用在过去任意做了savepoint的时刻开始继续消费

 

state.savepoints.dir: hdfs://haservice/flink-savepoints

2: 触发 Savepoint

我是在on yarn环境,操作如下:

执行命令: bin/flink savepoint 9d0d12c645c39d940cbdeb4713d57f39 -yid application_1611710499717_2476

结果如下:

3:从 Savepoint 恢复

执行命令:

bin/flink run -c com.application.TestApplication -m yarn-cluster -s hdfs://haservice/flink-savepoints/savepoint-d947a1-99573a0dd087 -ynm TestApplication -ys 2 Test.jar 

结果如下:

 

完成

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里风雪

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值