flink checkpoint恢复测试

测试代码

order 样例类

package com.stanley.checkpoint

/**
  * Created by admin on 2020/7/7.
  */
case class Order(id:Int,category:String,price:Double)

主函数

package com.stanley.checkpoint

import java.util.Properties

import org.apache.flink.api.common.functions.RichMapFunction
import org.apache.flink.api.common.serialization.{SimpleStringSchema}
import org.apache.flink.api.common.state.{ValueState, ValueStateDescriptor}
import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.api.CheckpointingMode
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011
import org.apache.flink.api.scala._
import org.apache.flink.runtime.state.filesystem.FsStateBackend
import org.apache.flink.streaming.api.environment.CheckpointConfig

/**
  * Created by admin on 2020/7/7.
  */
object CheckPointTest {
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //激活checkpoint,10秒触发一次
    env.enableCheckpointing(10000L)
    //设置为精确一次,重置kafka偏移量
    env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
    //取消任务保留检查点
    env.getCheckpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)
    //设置状态后端路径
    env.setStateBackend(new FsStateBackend("hdfs://node6:8020/user/flink/checkpoint"))
    //kafka配置
    var props = new Properties()
    props.setProperty("bootstrap.servers","node1:9092")
    props.setProperty("group.id","checkpoint2")
    props.setProperty("enable.auto.commit", "true")
    // 偏移量提交的时间间隔,毫秒
    props.setProperty("auto.commit.interval.ms", "5000")
    // kafka 消息的key序列化器
    props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    // kafka 消息的value序列化器
    props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    props.setProperty("auto.offset.reset", "latest")
    //kafka source
    val inputDataStream:DataStream[String] = env.addSource(new FlinkKafkaConsumer011[String]("topic_order",new SimpleStringSchema(),props))
    //输入数据包装成order样例类
    val outputDataStream:DataStream[(Int,String,Double)] = inputDataStream.map(str=>{
      val strs = str.split(",")
      new Order(strs(0).toInt,strs(1),strs(2).toDouble)
    }).keyBy("category").map(new MyMapFunction())
    outputDataStream.print("price")
    env.execute("test")
  }
}

//对不同类别物品价格进行累加
class MyMapFunction extends RichMapFunction[Order,(Int,String,Double)]{
  private var priceState:ValueState[Double]=_
  override def open(parameters: Configuration): Unit = {
    priceState = getRuntimeContext.getState[Double](new ValueStateDescriptor[Double]("price",classOf[Double]))
  }
  override def map(in: Order): (Int,String, Double) = {
    var price= priceState.value()
    price+=in.price
    priceState.update(price)
    (in.id,in.category,price)
  }
}

提交任务

测试

生产数据

控制台输出结果

取消任务

查看checkpoint

从checkpoint恢复任务

继续生产数据

再次取消任务,并从之前的checkpoint恢复

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是关于 Flink checkpoint 失败的原因。我来为你解答。 在 Flink 中,checkpoint 可能会因为多种原因失败,以下是一些常见的失败原因: 1. 内存不足:Flink checkpoint 需要使用一定的内存来缓存状态信息,如果内存不足,就可能会导致 checkpoint 失败。 2. 网络故障:Flink checkpoint 需要将状态信息保存到持久化存储中,如果网络发生故障,就可能无法完成状态信息的保存,从而导致 checkpoint 失败。 3. 存储故障:Flink checkpoint 需要将状态信息保存到持久化存储中,如果存储发生故障,就可能无法完成状态信息的保存,从而导致 checkpoint 失败。 4. 作业逻辑错误:在某些情况下,作业的逻辑错误可能会导致 checkpoint 失败。例如,当作业中存在状态依赖关系时,如果状态更新的顺序不正确,就可能导致 checkpoint 失败。 5. 配置错误:Flink checkpoint 的性能和可靠性与配置参数有关,如果配置参数不正确,就可能导致 checkpoint 失败。例如,如果 checkpoint 间隔时间太短,就可能导致 checkpoint 无法及时完成。 如果 checkpoint 失败,Flink 会尝试重新启动作业,并从最近成功的 checkpoint 开始恢复作业状态。如果无法恢复作业状态,则需要手动进行故障排查和修复。为了避免 checkpoint 失败,建议合理配置 Flinkcheckpoint 参数,并进行适当的性能测试和容错测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值