作者:陈守元 & 戴资力
整理:闵阁
陈守元(巴真)
阿里巴巴高级产品专家
嘉宾简介:阿里巴巴实时计算团队产品负责人,2010年毕业即加入阿里集团参与淘宝数据平台建设,近10年的大数据从业经验,开源项目Alibaba DataX发起人,当前负责阿里实时计算产品Flink的规划与设计,致力于推动Flink成为下一代大数据处理标准。
戴资力(Gordon Tai)
Apache Flink PMC ,Ververica Software Engineer
嘉宾简介:戴资力(Gordon Tai)是 Apache Flink 开源社区的 PMC 成员,目前任职于 Ververica 担任 Software Engineer,主要负责 Flink 的系统开发。在 Flink 的主要贡献包含:Apache Kafka / AWS Kinesis 精确一次连接数据源,数据类序列化框架,有状态流处理的应用升级等。曾于 Flink Forward San Francisco / Berlin / Beijing 与 Strata Data 担任讲者分享 Flink 相关议题。
一、Apache Flink 的定义、架构及原理
Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计算。
1. Flink Application
了解Flink 应用开发需要先理解Flink 的Streams、State、Time 等基础处理语义以及Flink 兼顾灵活性和方便性的多层次API。
-
Streams:流,分为有限数据流与无限数据流,unbounded stream 是有始无终的数据流,即无限数据流;而bounded stream 是限定大小的有始有终的数据集合,即有限数据流,二者的区别在于无限数据流的数据会随时间的推演而持续增加,计算持续进行且不存在结束的状态,相对的有限数据流数据大小固定,计算最终会完成并处于结束的状态。
-
State,状态是计算过程中的数据信息,在容错恢复和Checkpoint 中有重要的作用,流计算在本质上是Incremental Processing,因此需要不断查询保持状态;另外,为了确保Exactly- once 语义,需要数据能够写入到状态中;而持久化存储,能够保证在整个分布式系统运行失败或者挂掉的情况下做到Exactly- once,这是状态的另外一个价值。
-
Time,分为Event time、Ingestion time、Processing time,Flink 的无限数据流是一个持续的过程,时间是我们判断业务状态是否滞后,数据处理是否及时的重要依据。
-
API,API 通常分为三层,由上而下可分为SQL / Table API、DataStream API、ProcessFunction 三层,API 的表达能力及业务抽象能力都非常强大,但越接近SQL 层,表达能力会逐步减弱,抽象能力会增强,反之,ProcessFunction 层API 的表达能力非常强,可以进行多种灵活方便的操作,但抽象能力也相对越小。
2. Flink Architecture
在架构部分,主要分为以下四点:
第一,Flink 具备统一的框架处理有界和无界两种数据流的能力
第二, 部署灵活,Flink 底层支持多种资源调度器,包括Yarn、Kubernetes 等。Flink 自身带的Standalone 的调度器,在部署上也十分灵活。
第三, 极高的可伸缩性,可伸缩性对于分布式系统十分重要,阿里巴巴双11大屏采用Flink 处理海量数据,使用过程中测得Flink 峰值可达17 亿/秒。
第四, 极致的流式处理性能。Flink 相对于Storm 最大的特点是将状态语义完全抽象到框架中,支持本地状态读取,避免了大量网络IO,可以极大提升状态存取的性能。
3. Flink Operation
后面会有专门课程讲解,此处简单分享Flink 关于运维及业务监控的内容:
-
Flink具备7 X 24 小时高可用的SOA(面向服务架构),原因是在实现上Flink 提供了一致性的Checkpoint。Checkpoint是Flink 实现容错机制的核心,它周期性的记录计算过程中Operator 的状态,并生成快照持久化存储。当Flink 作业发生故障崩溃时,可以有选择的从Checkpoint 中恢复,保证了计算的一致性。
-
Flink本身提供监控、运维等功能或接口,并有内置的WebUI,对运行的作业提供DAG 图以及各种Metric 等,协助用户管理作业状态。
<