Flink中的Checkpoint和Spark中的Checkpoint区别
Posted 宝哥大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink中的Checkpoint和Spark中的Checkpoint区别相关的知识,希望对你有一定的参考价值。
文章目录
一、checkpoint
流式应用程序必须 24/7 全天候运行,因此必须能够应对与应用程序逻辑无关的故障(例如,系统故障、JVM 崩溃等)。
1.1、Spark Streaming 的 checkpoint
Spark Streaming 需要通过Checkpoint将必要的数据或者操作进行备份,以便它可以从故障中恢复。检查点有两种类型的数据。
1.1.1、元数据检查点
将定义流计算的信息保存到 HDFS 等容错存储中。这用于从运行流应用程序驱动程序的节点故障中恢复。元数据检查点主要用在Driver进程中恢复程序。
这类信息主要包括以下几方面:
- SparkConf的相关信息
- Dream的相关操作
- 队列中等待处理的Job
1.1.2、数据检查点
将生成的 RDD 保存到可靠的存储中。这在一些跨多个批次组合数据的有状态转换中是必要的。在有状态的转换操作中,Spark Streaming会定期自动设置检查点,以切断上游依赖。
在这样的转换中,生成的 RDD 依赖于前一批的 RDD,这导致依赖链的长度随着时间的推移而不断增加,数据重算所耗费的时间,与依赖连的长度成正比。为了避免恢复时间的无限制增加(与依赖链成正比),有状态转换的中间 RDD 会定期检查点到可靠存储(例如 HDFS)以切断依赖链。
总而言之,元数据检查点主要用于从驱动程序故障中恢复,而数据或 RDD 检查点对于使用状态转换的基本功能也是必需的。
1.2、Flink 的 checkpoint
spark streaming 的 checkpoint 仅仅是针对 driver 的故障恢复做了数据和元数据的 checkpoint。
flink 的 checkpoint 机制 要复杂了很多,它采用的是轻量级的分布式快照,实现了每个算子的快照,及流动中的数据的快照。
二、Exactly-Once Semantics
对于 SparkStreaming 任务,我们可以设置 checkpoint,然后假如发生故障并重启,我们可以从上次 checkpoint 之处恢复,但是这个行为只能使得数据不丢失,可能会重复处理,不能做到恰一次处理语义。
Flink 则使用 两阶段提交协议 来解决这个问题。
以上是关于Flink中的Checkpoint和Spark中的Checkpoint区别的主要内容,如果未能解决你的问题,请参考以下文章