Flink on zeppelin第五弹设置checkpoint

概述

Flink的exactly-once语义实现是需要依赖checkpoint的,对于一个有状态的Flink任务来说如果想要在任务发生failover,或者手动重启任务的时候任务的状态不丢失是必须要开启checkpoint的,今天这篇文章主要分享一下Flink on zeppelin里面怎么设置checkpoint以及怎么从指定的checkpoint恢复任务.

checkpoint配置

%flink.conf
// 设置任务使用的时间属性是eventtime
pipeline.time-characteristic EventTime
// 设置checkpoint的时间间隔
execution.checkpointing.interval 10000
// 确保检查点之间的间隔
execution.checkpointing.min-pause 60000
// 设置checkpoint的超时时间
execution.checkpointing.timeout 60000
// 设置任务取消后保留hdfs上的checkpoint文件
execution.checkpointing.externalized-checkpoint-retention RETAIN_ON_CANCELLATION

只需要像上面这样就可以配置任务的checkpoint了,当然除了配置这些参数外也可以设置任务的jm,tm等参数,Interpreters 设置里面的很多参数(比如下图的这些)都是可以在note里面直接执行的,然后在这个note里面的任务都会使用刚才的配置.

在执行这些配置的时候需要先把Interpreters 重启一下,因为当Interpreters 进程已启动时就无法更改Interpreters 的属性了,否则会遇到下面的报错

java.io.IOException: Can not change interpreter properties when interpreter process has already been launched
  at org.apache.zeppelin.interpreter.InterpreterSetting.setInterpreterGroupProperties(InterpreterSetting.java:957)
  at org.apache.zeppelin.interpreter.ConfInterpreter.interpret(ConfInterpreter.java:73)
  at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:458)
  at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:72)
  at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
  at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:130)
  at org.apache.zeppelin.scheduler.FIFOScheduler.lambda$runJobInScheduler$0(FIFOScheduler.java:39)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)

创建kafak流表

然后来一个非常简单的聚合查询,为了体现任务是从状态中恢复的,所以我们这里根据name分组计算了一个count(age)的操作

这里我先写入了10条数据,jason和spark都是5条,然后先来看一下HDFS上的checkpoint文件是否生成了.

可以看到此时任务已经完成了4次checkpoint了,这时候把任务cancel掉,然后从上一次成功的checkpoint处恢复任务,也就是第4个checkpoint的地方.

%flink.conf
execution.savepoint.path hdfs://master:9000//flink-rockdb/checkpoints/904d58cbd50821f42f33ffed91989ba0/chk-4

需要指定刚才任务的checkpoint路径,先执行上面的语句,然后再接着执行刚才的那条SQL就可以了.

从上面的图可以很清楚的看到,任务是从第4个checkpoint处恢复计算的,然后再来往kafka中写入10条数据看下结果是否正确.

可以看到结果是正确的,是从刚才的状态里面的值接着计算的,说明任务从checkpoint里面恢复成功了.整个过程是不需要写任何代码的,只需要在note里面执行几行配置就可以了,使用起来还是非常方便的.

这篇文章主要是介绍Flink on zeppelin如何设置任务的checkpoint,以及任务重启的时候怎么从指定的checkpoint位置恢复任务.

推荐阅读

Flink on zeppelin第四弹hive streaming writing

JasonLee,公众号:JasonLee的博客Flink on zeppelin第四弹hive streaming writing

Flink on zeppelin第三弹UDF的使用

JasonLee,公众号:JasonLee的博客Flink on zeppelin第三弹UDF的使用

Flink on zeppelin 实时计算pv,uv结果写入mysql

JasonLee,公众号:JasonLee的博客Flink on zeppelin体验第二弹

Flink on zepplien的安装配置

JasonLee,公众号:JasonLee的博客Flink on zepplien的使用体验

更多spark和flink的内容可以关注下面的公众号

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Flink SQL可以通过设置checkpoint来保证数据的一致性和容错性。具体的设置方法包括: 1. 在Flink SQL的执行环境中,通过设置ExecutionConfig的checkpointingEnabled属性为true来启用checkpoint。 2. 设置checkpoint的间隔时间和超时时间,可以通过ExecutionConfig的checkpointIntervalcheckpointTimeout属性来设置。 3. 设置checkpoint的存储位置,可以通过ExecutionConfig的stateBackend属性来设置。 4. 设置checkpoint的并发度,可以通过ExecutionConfig的maxParallelism属性来设置。 5. 在Flink SQL中,可以通过设置TABLE_PROPERTIES属性来设置checkpoint的相关参数,例如: CREATE TABLE myTable ( id INT, name STRING, age INT, PRIMARY KEY (id) NOT ENFORCED ) WITH ( 'connector' = 'kafka', 'topic' = 'myTopic', 'properties.bootstrap.servers' = 'localhost:9092', 'format' = 'json', 'scan.startup.mode' = 'earliest-offset', 'checkpoint.interval.ms' = '10000', 'checkpoint.timeout.ms' = '60000', 'state.backend' = 'rocksdb', 'state.backend.rocksdb.checkpoint.interval' = '10000', 'state.backend.rocksdb.checkpoint.timeout' = '60000', 'max.parallelism' = '4' ); 以上就是Flink SQL设置checkpoint的方法和步骤。 ### 回答2: Apache Flink是一款分布式流处理框架,可用于处理实时的数据流。Flink提供了SQL API,可以使用标准SQL语言处理数据。在使用Flink SQL时,也需要设置CheckpointCheckpoint是一种Flink用于实现容错和恢复的机制,用于将数据流保存到持久存储中。在Flink中,数据被分为一系列的流水线,称为任务链。当收到事件时,它经过一系列的处理步骤,最终被发送到输出。Checkpoint利用Flink的任务链,将数据流保存在状态后端或文件系统中,以避免数据丢失。 在Flink SQL中,通过设置`checkpointInterval`参数来设置Checkpoint间隔。此参数表示执行完每个指定的毫秒数后,Flink将在所有操作完成后执行Checkpoint。接下来,我们将讨论如何在Flink SQL中设置Checkpoint。 首先,我们需要在Flink SQL中创建一个StreamExecutionEnvironment并将其设置为流模式。接下来,为此环境配置Checkpoint属性。以下是示例代码: ``` StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.enableCheckpointing(60000); env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000); env.getCheckpointConfig().setCheckpointTimeout(10000); env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); ``` 在上面的代码中,`enableCheckpointing(60000)`表示将每隔60秒进行一次Checkpoint。`.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)`表示在Checkpoint期间,每个事件仅处理一次。`setMinPauseBetweenCheckpoints(30000)`是两个Checkpoint之间的最小时间间隔。`setCheckpointTimeout(10000)`是检查点超时的时间限制。最后,`setMaxConcurrentCheckpoints(1)`表示不允许同时进行多个Checkpoint。 以上是Flink SQL中设置Checkpoint的步骤和代码示例。通过设置适当的Checkpoint参数,可以确保Flink应用程序的容错性和可靠性,以便在失败时恢复数据。 ### 回答3: Flink SQL是指在Flink平台上使用SQL语言进行数据处理。在实际使用中,我们需要对Flink SQL进行设置checkpoint,以实现数据的可靠性和容错性。 设置checkpoint有两种方式:一种是基于代码实现,另一种是基于Flink Web UI进行配置。 首先,我们需要在代码中启用checkpoint,并设置checkpoint相关的参数,如checkpoint的间隔时间、最大同时进行的checkpoint数量等。然后,在代码中定义一个可靠的存储系统,如HDFS、S3等,用来存储checkpoint数据。 具体地,我们可以通过以下代码启用checkpoint: 1. 在ExecutionEnvironment中设置checkpoint间隔时间和最大同时进行的checkpoint数量: env.enableCheckpointing(5000); // checkpoint每间隔5000ms执行一次 env.getCheckpointConfig().setMaxConcurrentCheckpoints(1); // 最大同时进行的checkpoint数量为1 2. 设置可靠存储系统,以存储checkpoint数据: env.setStateBackend(new FsStateBackend("hdfs:///flink/checkpoint")); 然后,我们还需要在Flink Web UI中进行相关的设置,以确保checkpoint正常运行。 在Flink Web UI中,我们需要打开“Job Manager”页面,并点击“Configure”按钮。在出的对话框中,我们可以设置checkpoint的间隔时间、最大同时进行的checkpoint数量等。在“Checkpoint Storage”选项卡中,我们需要选择一个可靠的存储系统,如HDFS、S3等,用来存储checkpoint数据。 最后,我们可以通过在代码中调用env.execute("jobName")方法来启动Flink SQL任务,并在Flink Web UI中查看任务的状态和checkpoint的情况。 总的来说,设置checkpointFlink SQL中保证数据可靠性和容错性的重要手段,在实际使用中需要注意参数设置和可靠存储系统的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JasonLee实时计算

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

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

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

打赏作者

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

抵扣说明:

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

余额充值