Flink 发展历程
2008,柏林理工大学一个团队启动了 Stratosphere 项目,目标是建立下一代大数据分析引擎
2014-04-16,Stratosphere 成为 Apache 孵化项目,从 Stratosphere 0.6 开始,正式更名为 Flink,由 Java 语言编写
2014-11-04,Flink 0.7.0 发布,介绍了最重要的特性:Streaming API
2016-03-08,Flink 1.0.0,支持 Scala
2019 年初,阿里收购 Flink 产品所属公司 ververica ,并创建了自己的产品 Blink (Flink 的一个分支)
什么是 Flink
Flink 的定义
Apache Flink 是一个在无界和有界数据流上进行状态计算的框架和分布式处理引擎。
从定义中我们知道,Apache Flink 是框架,是处理引擎,它的作用是对数据流进行计算。
我们还了解到,它支持两种类型的数据流,无界数据流和有界数据流,并且支持对数据流进行带状态的计算。
那么什么叫做带状态的计算,什么叫做无界数据流,什么又叫做有界数据流了?
什么是数据流
任何类型的数据都可以形成数据流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都可以形成数据流。
什么是有界数据流
有界数据流定义了流的开始,也定义了流的结束。有界数据流可以在摄取所有数据后再进行计算。有界数据流的数据可以被排序,所以不需要有序摄取。
什么是无界数据流
无界数据流定义了流的开始,但没有定义流的结束。这种数据流会无休止地产生数据(至少从理论上来说)。因为输入是无限的,我们不能等到所有数据都到达后再处理,必须持续不断地对到达的数据进行处理。处理无界数据流通常要求以特定顺序摄取数据,例如事件发生的顺序
Apache Flink 擅长处理流,批被 Apache Flink 视为有界数据流,因此 Flink 被称为流批一体的数据计算引擎
什么是状态计算
什么是无状态的计算
每次进行数据计算只是考虑当前数据,不会使用之前数据的计算结果
什么是有状态的计算
每次进行数据计算的时候,都要基于之前数据的计算结果(状态)做计算,并且每次计算结果都会保存到存储介质中
实际应用中,大部分场景都需要记录状态,例如统计某个用户的在一段时间内的访问数,车辆在某段时间的最大行驶速度等,因此一个流处理框架是否支持带状态的计算是一个很重要的特性
分布式计算
支持有界、无界数据流、支持状态计算只是 Flink 这个框架的特性,而分布式计算,才是 Flink 这个大数据框架 区别于普通数据计算框架的核心。
Flink 通过在多台机器上部署实例,组成计算集群,便可以将一台计算机无法处理的大型任务拆分成多个小任务,分发到集群中的其他实例上进行分布式计算。(具体细节后面的章节会讲到)
Flink 定义总结
- Apache Flink 是框架,是处理引擎
- Apache Flink 支持分布式计算
- Apache Flink 支持无界数据流和有界数据流
- Apache Flink 支持对数据流进行带状态的计算
除了上面提到几个主要特性外,Flink 还有很多其他的特性,例如
- 高吞吐、低延迟、高性能
- 基于 JVM 实现独立的内存管理
- 支持事件时间(Event Time)语义,结合
Watermark
机制,可以处理乱序数据 - 支持高度灵活的窗口(Window) 操作
- 基于轻量级分布式快照(CheckPoint) 实现的容错,保证 exactly-once 语义
- Save Points(保存点)
- 支持将状态存储在多种媒介中(内存、文件、RocksDB)
...
这些后面都会讲到
Flink 学习资料
- Flink 官网 :flink.apache.org/zh/
- Flink 最新稳定版官方文档:ci.apache.org/projects/fl…
- Flink 中文社区视频课程:ververica.cn/developers/…
- Flink 源码:github.com/apache/flin…
由于阿里的推广,Flink 拥有大量的中文资料,其实学习 Flink 的最好方式就是跟着官方文档一步一步走。