2020-09 Flink-Checkpointing机制和exactly-once的保障

Flink-Checkpointing机制和exactly-once的保障

Checkpointing机制

概念:Checkpoint

Checkpoint是一种快照(snapshot),另外,savepoint也是一种快照(snapshot),这里的快照(snapshot)指的是所有Operator的State的全局快照(分布式系统的快照)。实际上,checkpoint和savepoint几乎是相同的,仅在以下两个方面不同:

Savepoints are triggered by the user and don’t automatically expire

  • savepoint由用户手动触发生成
  • savepoint不会过期自动清理

checkpoint生成机制概览

image-20201014142102064

保存快照是异步的

Keep in mind that everything to do with checkpointing can be done asynchronously. The checkpoint barriers don’t travel in lock step and operations can asynchronously snapshot their state.

checkpoint需要手动设置:

  • 定义state:Stream API 有多种方式定义state:windows、key/value state、CheckpointedFunction,其他API怎么使用checkpoint?

  • 主动开启checkpoint,默认是不开启checkpoint的

Barriers

Barrier是一个特殊的消息,触发所有Operator保存snapshot的标识消息,和其他消息一起按照顺序流经整个系统,由JobManager触发各个source生成。

image-20200929104440302

Operator生成快照的方式之一:Aligned checkpoints

image-20200929113822288

这种Aligned(对齐) checkpoints的机制可以做到Exactly-once,还有其他的checkpoints的方式,这里不展开。

Aligned checkpoints的特点是有多个输入流的Operator要等到所有的Barrier到齐后,再向下游发送Barrier,如果一个流的Barrier先到了,这个流的Barrier之后的所有消息都会被阻塞,直到所有Barrier都到齐并向下游发送了Barrier之后才结束阻塞状态。

保存snapshot的时机

Operators snapshot their state at the point in time when they have received all snapshot barriers from their input streams, and before emitting the barriers to their output streams.

也可以关闭上述阻塞机制,但是保存snapshot的时机是一样的,这时提供的是At-least-once保证,带来的好处更低的延迟。

image-20201014141630078

图中Checkpoint data保存在:

in the JobManager’s memory (or, in high-availability mode, in the metadata checkpoint)

Operator生成快照的方式之二:Unaligned checkpoints(Flink 1.11引入)

image-20201014153141208

Recovery(恢复)

Recovery under this mechanism is straightforward: Upon a failure, Flink selects the latest completed checkpoint k. The system then re-deploys the entire distributed dataflow, and gives each operator the state that was snapshotted as part of checkpoint k. The sources are set to start reading the stream from position Sk. For example in Apache Kafka, that means telling the consumer to start fetching from offset Sk.

具体有不同的Restart Strategies

https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/task_failure_recovery.html#restart-strategies

如何做到Exactly-once的?

三种常见的场景

  • Flink makes no effort to recover from failures (at most once)
  • Nothing is lost, but you may experience duplicated results (at least once)
  • Nothing is lost or duplicated (exactly once)

Exactly-once的含义:

Given that Flink recovers from faults by rewinding and replaying the source data streams, when the ideal situation is described as exactly once this does not mean that every event will be processed exactly once. Instead, it means that every event will affect the state being managed by Flink exactly once.

Exactly-once并不意味着在失败和恢复的过程中,消息只会被处理一次,更确切的说,消息的处理是遵循at least once的;所谓的exactly-once是指消息对“状态”的作用效果是严格的只执行一次,比如对多个消息进行求和,求和的结果就是一种“状态”,exactly-once保证的是在恢复之后,最终求和的结果一定是正确的,即最终效果是一个消息既不会丢失、也不会重复统计到结果中(exactly-once),但是,对这条消息对处理可能会重复执行。

Exactly-once 和 Exactly Once End-to-end有区别:

To achieve exactly once end-to-end, so that every event from the sources affects the sinks exactly once, the following must be true:

  1. your sources must be replayable, and(源端可以重放数据,保证Exactly-once的要求)
  2. your sinks must be transactional (or idempotent)(目标端支持事务或者是幂等的,保证Exactly Once End-to-end的要求)

从本质上来理解,exactly-once的作用范围限制在所有Operator中,snapshot也只是记录了所有Operator的状态快照,不会也不能对外部系统做快照,外部系统指的是sink写入的目标端系统;而Exactly Once End-to-end(端到端的exactly-once),包含了外部系统在内,其涉及的范围是超过exactly-once的作用范围的,因此单纯的exactly-once不可能保证Exactly Once End-to-end。要想实现Exactly Once End-to-end,需要在exactly-once的基础上,对外部系统额外作出一些限制,这个限制是:

  • 目标端支持事务或者是幂等的

这里要对目标端支持事务做单独的说明,对一个支持事务(不是幂等的)的目标端,要想做到Exactly Once End-to-end,必须要严格地每生成一个checkpoint做一次commit,这会带来不可避免的延迟,这个延迟取决于checkpoint的生成间隔。

(commit失败如何处理?)

image-20201014143636996
image-20201014144157771
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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