Flink状态管理和容错机制介绍

发布时间:2020-04-23 21:21:08 作者:Ververica
来源:网络 阅读:433

作者: 施晓罡

本文来自2018年8月11日在北京举行的 Flink Meetup会议,分享来自于施晓罡,目前在阿里大数据团队部从事Blink方面的研发,现在主要负责Blink状态管理和容错相关技术的研发。

本文主要内容如下:

一.有状态的流数据处理

1.1什么是有状态的计算

计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算。 比如wordcount,给一些word,其计算它的count,这是一个很常见的业务场景。count做为输出,在计算的过程中要不断的把输入累加到count上去,那么count就是一个state。

1.2.传统的流计算系统缺少对于程序状态的有效支持

Flink状态管理和容错机制介绍cdn.xitu.io/2019/4/25/16a532cb9435dfda?w=1171&h=609&f=png&s=95901">
在传统的批处理中,数据是划分为块分片去完成的,然后每一个Task去处理一个分片。当分片执行完成后,把输出聚合起来就是最终的结果。在这个过程当中,对于state的需求还是比较小的。

对于流计算而言,对State有非常高的要求,因为在流系统中输入是一个无限制的流,会运行很长一段时间,甚至运行几天或者几个月都不会停机。在这个过程当中,就需要将状态数据很好的管理起来。很不幸的是,在传统的流计算系统中,对状态管理支持并不是很完善。比如storm,没有任何程序状态的支持,一种可选的方案是storm+hbase这样的方式去实现,把这状态数据存放在Hbase中,计算的时候再次从Hbase读取状态数据,做更新在写入进去。这样就会有如下几个问题

1.3.Flink丰富的状态访问和高效的容错机制

Flink在最早设计的时候就意识到了这个问题,并提供了丰富的状态访问和容错机制。如下图所示:

Flink状态管理和容错机制介绍

二.Flink中的状态管理

2.1.按照数据的划分和扩张方式,Flink中大致分为2类:

Flink状态管理和容错机制介绍

2.1.1.Keyed States

Keyed States的使用

Flink状态管理和容错机制介绍

Flink也提供了Keyed States多种数据结构类型

Flink状态管理和容错机制介绍

Keyed States的动态扩容

Flink状态管理和容错机制介绍

2.1.2.Operator State

Operator States的使用

Flink状态管理和容错机制介绍

Operator States的数据结构不像Keyed States丰富,现在只支持List

Operator States多种扩展方式

Flink状态管理和容错机制介绍

Operator States的动态扩展是非常灵活的,现提供了3种扩展,下面分别介绍:

以上是Flink Operator States提供的3种扩展方式,用户可以根据自己的需求做选择。

使用Checkpoint提高程序的可靠性

用户可以根据的程序里面的配置将checkpoint打开,给定一个时间间隔后,框架会按照时间间隔给程序的状态进行备份。当发生故障时,Flink会将所有Task的状态一起恢复到Checkpoint的状态。从哪个位置开始重新执行。

Flink也提供了多种正确性的保障,包括:

备份为保存在State中的程序状态数据

Flink也提供了一套机制,允许把这些状态放到内存当中。做Checkpoint的时候,由Flink去完成恢复。

Flink状态管理和容错机制介绍

从已停止作业的运行状态中恢复

当组件升级的时候,需要停止当前作业。这个时候需要从之前停止的作业当中恢复,Flink提供了2种机制恢复作业:

Flink状态管理和容错机制介绍

三.状态管理和容错机制实现

下面介绍一下状态管理和容错机制实现方式,Flink提供了3种不同的StateBackend

用户可以根据自己的需求选择,如果数据量较小,可以存放到MemoryStateBackend和FsStateBackend中,如果数据量较大,可以放到RockDB中。

下面介绍HeapKeyedStateBackend和RockDBKeyedStateBackend

第一,HeapKeyedStateBackend

Flink状态管理和容错机制介绍

第二,RockDBKeyedStateBackend

Flink状态管理和容错机制介绍

Checkpoint的执行流程

Checkpoint的执行流程是按照Chandy-Lamport算法实现的。

Flink状态管理和容错机制介绍

Checkpoint Barrier的对齐

Flink状态管理和容错机制介绍

全量Checkpoint

全量Checkpoint会在每个节点做备份数据时,只需要将数据都便利一遍,然后写到外部存储中,这种情况会影响备份性能。在此基础上做了优化。

Flink状态管理和容错机制介绍

RockDB的增量Checkpoint

RockDB的数据会更新到内存,当内存满时,会写入到磁盘中。增量的机制会将新产生的文件COPY持久化中,而之前产生的文件就不需要COPY到持久化中去了。通过这种方式减少COPY的数据量,并提高性能。

Flink状态管理和容错机制介绍

四.阿里相关工作介绍

4.1.Flink在阿里的成长路线

阿里是从2015年开始调研Flink,2015年10月启动Blink项目,并完善Flink在大规模生产下的一些优化和改进。2016年双11采用了Blink系统,为搜索,推荐,广告业务提供服务。2017年5月Blink已成为阿里的实时计算引擎。

Flink状态管理和容错机制介绍

4.2.阿里在状态管理和容错相关的工作

Flink状态管理和容错机制介绍

正在做的工作,基于State重构Window方面的一些优化,阿里也正在将功能做完善。后续将包括asynchronous Checkpoint的功能完善,并和社区进一步沟通和合作。帮助Flink社区完善相关方面的工作。

更多资讯请访问 Apache Flink 中文社区网站

推荐阅读:
  1. 六、flink--容错机制
  2. 五、flink--state状态管理机制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

flink 实时计算 流计算

上一篇:运维平台-workflow项目-总述

下一篇:debian 图形界面安装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》