Flink 能否动态更改 Checkpoint 配置?
前段时间在社区邮件中看到有人提问是否可以动态开启 Checkpoint,昨天在钉钉群中又看到有个同学在问能够动态调整 Checkpoint 的时间,其实不仅仅是这些,在社区邮件和群里经常看到有问这块内容的问题,所以可以发现在 Flink 中其实关于 Checkpoint 相关的东西还是非常重要且解决起来比较麻烦,估计应该也困扰了不少人。
不过今天的话题不是在于去讨论 Checkpoint 的机制,因为前面两个问题都涉及到了动态的去配置 Checkpoint 的参数(是否开启和 Checkpoint 的时间间隔),而 zhisheng 我在前面通过两个视频讲解了 Flink 如何与 Apollo 和 Nacos 整合去动态的更改作业配置,所以私底下就有同学找我咨询是否可以动态的更改 Checkpoint 配置,我当时因为知道其实有些参数是一旦初始化了之后是改不了的,但是具体什么参数我也不难全部列举,所以只好回答那位同学说:以自己实测的结果为准哈。
所以这里我就给大家演示一下到底是否可以动态的更改 Checkpoint 配置,请看我在 B 站的视频(点击文章末尾的阅读原文可以查看):
https://www.bilibili.com/video/av92655075/
通过这个视频,虽然我是使用 Flink 和 Nacos 整合的,作业监听到了 Checkpoint 的配置做了修改,但是可以发现其实 Checkpoint 更改后其实是不生效的。
这里仅从个人的思考来解释一下:因为 Flink 是 Lazy Evaluation(延迟执行),当程序的 main 方法执行时,我们创建的 env 会依次进行属性的初始化配置,但是数据源加载数据和数据转换等算子不会立马执行,这些算子操作会被创建并添加到程序的执行计划中去,只有当执行环境 env 的 execute 方法被显示地触发执行时,整个程序才开始执行实际的操作(StreamGraph -> JobGraph -> ExecutionGraph),所以在程序执行 execute 方法后再修改 env 的配置其实就不起作用了。
另外给大家来看下邱从贤(负责 Flink State 相关)对能否动态配置 Checkpoint 的回答:
相关的测试代码在: https://github.com/zhisheng17/flink-learning/blob/master/flink-learning-configration-center/flink-learning-configration-center-nacos
END
关注我
公众号(zhisheng)里回复 面经、ES、Flink、 Spring、Java、Kafka、监控 等关键字可以查看更多关键字对应的文章。