Flink 简介

589 阅读4分钟

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 的最好方式就是跟着官方文档一步一步走。