Flink

1. Flink的CheckPoint存在哪里?

默认情况下,State会保存在TaskManager的内存中,CheckPoint会存储在JobManager的内存中。State和CheckPoint的存储位置取决于StateBackend的配置。Flink一共提供了3种StateBackend。包括基于内存的MemoryStateBackend、基于文件系统的FsStateBackend,以及基于RockDB作为存储介质的RocksDBState-Backend。
checkpoint的参数设置:

import org.apache.flink.api.common.restartstrategy.RestartStrategies;
import org.apache.flink.streaming.api.CheckpointingMode;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.environment.CheckpointConfig;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
 
public class FlinkEnvConf {
 
    public static StreamExecutionEnvironment getEnv(){
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //设置每次checkpoint间隔,每隔60s一次
        env.enableCheckpointing(1000 * 60);
        //设置checkpoint模式,exactly_once只处理一次
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
        //设置时间语义,设置事件时间
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        //设置失败重启策略,尝试重启5次,每隔120s重启1次
        env.setRestartStrategy(RestartStrategies.fixedDelayRestart(5, org.apache.flink.api.common.time.Time.seconds(120)));
        //设置checkpoint之心超时时间,设置10分钟超时
        env.getCheckpointConfig().setCheckpointTimeout(60000);
        //设置两次checkpoint的最小间隔
        env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
        //设置最大并行的checkpoint数量
        env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
        //设置是够保存checkpoint的数据,RETAIN_ON_CANCELLATION会保留CheckPoint数据
        env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
        //设置checkpoint可以容忍失败的次数
        env.getCheckpointConfig().setTolerableCheckpointFailureNumber(1);
        //设置若有最新的savepoint,优先采用savepoint来恢复成检查点
        env.getCheckpointConfig().setPreferCheckpointForRecovery(true);
        return env;
    }
}

原文链接:https://blog.csdn.net/lzxlfly/article/details/108819754

2. Flink状态机制

state 和 checkpoint

3. Flink的checkpoint机制对比spark有什么不同和优势

从数据一致性角度来看,Spark Streaming的checkpoint是基于RDD的计算图,而Flink的checkpoint是基于状态后端的。从效率和延迟的角度来看,Spark Streaming的checkpoint可能导致较高的延迟,而Flink的checkpoint通过异步快照实现较低的延迟。从容错性角度来看,Spark Streaming依赖于可靠的分布式文件系统,而Flink可以选择不同的状态后端进行容错。最后,从精准一次语义的角度来看,Spark Streaming的checkpoint无法保证精准一次语义,而Flink的checkpoint能够保证精准一次的语义。

01数据一致性

从数据一致性的角度来看,Spark Streaming的checkpoint和Flink的checkpoint在实现上有一些不同:

1.Spark Streaming的checkpoint:

Spark Streaming的checkpoint机制是基于RDD(弹性分布式数据集)的。它通过将应用程序的元数据(包括DAG图、转换操作等)和RDD的计算图序列化到可靠的分布式文件系统(如HDFS)上来实现数据一致性。

当应用程序发生故障时,Spark Streaming可以使用checkpoint信息来恢复丢失的数据。它会从checkpoint中重新计算丢失的RDD,并继续处理后续的数据流。

image.png

2.Flink的checkpoint:

Flink的checkpoint机制是基于状态后端的,它保存了应用程序的状态和操作符的计算状态。Flink的状态后端可以选择不同的存储方式,包括内存、文件系统、分布式文件系统等,以保证数据的可靠性和一致性。

当应用程序发生故障时,Flink可以从最近一次成功的checkpoint中恢复状态,并继续处理数据流。它会确保所有操作符的状态都能够准确地恢复到最近一次的一致状态。

精确一次语义:

Spark Streaming的checkpoint机制无法保证精确一次的语义。在故障恢复时,Spark Streaming可能会有一些重复数据或丢失数据的情况发生。这是因为Spark Streaming的checkpoint是基于RDD的计算图,而RDD的转换操作是惰性执行的,当应用程序恢复时,可能会重新执行一些转换操作,导致数据的重复或丢失。

Flink的checkpoint机制可以保证精确一次的语义。它会在执行快照时,对所有状态进行一致性检查,并在故障恢复时准确地恢复到最近一次的一致状态。这意味着在Flink中,不会有重复数据或丢失数据的情况发生。

02效率和延迟

从效率和延迟的角度来看,Spark Streaming的checkpoint和Flink的checkpoint在实现上也存在一些差异:

1.Spark Streaming的checkpoint:

Spark Streaming的checkpoint机制对于大规模的流处理应用来说,可能会导致较高的延迟。当进行checkpoint时,Spark Streaming需要将RDD的计算图序列化到可靠的分布式文件系统(如HDFS)上,这会涉及磁盘IO操作,导致一定的延迟。

此外,Spark Streaming的checkpoint机制需要将RDD的计算图完整地保存在checkpoint中,这会占用较多的存储空间,并且在进行故障恢复时,需要重新计算丢失的RDD,进一步增加了延迟。

2.Flink的checkpoint:

Flink的checkpoint机制通过异步快照来实现,可以在不阻塞流处理的情况下进行状态的持久化,因此具有较低的延迟。Flink会将应用程序的状态和操作符的计算状态异步地写入到状态后端中,而不需要进行磁盘IO操作。

此外,Flink的状态后端可以选择不同的存储方式,包括内存、文件系统、分布式文件系统等,可以根据应用程序的需求进行灵活配置,从而进一步提高效率和降低延迟。

03容错性

从容错性的角度来看,Spark Streaming的checkpoint和Flink的checkpoint在实现上也有一些不同:

1.Spark Streaming的checkpoint:

Spark Streaming的checkpoint机制依赖于可靠的分布式文件系统(如HDFS)来存储checkpoint数据,以保证数据的容错性。当应用程序执行checkpoint时,它会将应用程序的元数据和RDD的计算图序列化到分布式文件系统上。

在故障恢复时,Spark Streaming可以使用checkpoint信息来恢复丢失的数据。它会重新计算丢失的RDD,并继续处理后续的数据流,以确保应用程序能够从故障中恢复并继续进行流处理。

2.Flink的checkpoint:

Flink的checkpoint机制可以选择不同的状态后端来存储checkpoint数据,包括内存、文件系统、分布式文件系统等。这些状态后端都提供了持久化存储的能力,以确保数据的容错性。

当应用程序发生故障时,Flink可以从最近一次成功的checkpoint中恢复状态,并继续处理数据流。它会确保所有操作符的状态都能够准确地恢复到最近一次的一致状态,以保证应用程序的容错性。

https://www.sohu.com/a/729473781_100110101

4. 反压

生产数据的速率比下游 task 消费数据的速率要快
解决方案
https://flink-learning.org.cn/article/detail/6e41b3bbeb59c49f66030e86b1281751
https://zhuanlan.zhihu.com/p/656037315

5. Flink CEP

https://xie.infoq.cn/article/b2ffe9c41ecb4647a1ed8a340

6. Flink双流JOIN

TTL

        tableEnv.createTemporaryView("t1", waterSensor1);
        tableEnv.createTemporaryView("t2", waterSensor2);

        // inner join
        // left: OnCreateAndWrite    right: OnCreateAndWrite
//        tableEnv.sqlQuery("select t1.id, t1.vc, t2.id, t2.vc from t1 join t2 on t1.id = t2.id")
//                .execute()
//                .print();

        // left join
        // left: OnReadAndWrite    right: OnCreateAndWrite
//        tableEnv.sqlQuery("select t1.id, t1.vc, t2.id, t2.vc from t1 left join t2 on t1.id = t2.id")
//                .execute()
//                .print();

        // full join
        // left: OnReadAndWrite    right: OnReadAndWrite
        tableEnv.sqlQuery("select t1.id, t1.vc, t2.id, t2.vc from t1 full join t2 on t1.id = t2.id")
                .execute()
                .print();

99. 面试

https://www.modb.pro/db/223860

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容