Overview
Flink 概述
Apache Flink
是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能
Flink 是什么
Apache Flink
是一个面向分布式数据流处理和批量数据处理的开源计算平台,提供支持流处理和批处理两种类型应用的功能Apache Flink
的前身是柏林理工大学一个研究性项目, 在 2014 被Apache
孵化器所接受,然后迅速地成为了Apache Software Foundation
的顶级项目之一- 代码主要由
Java
实现,部分代码是Scala
Flink
主要处理的场景就是流数据,批处理只是流数据的一个极限特例
数据类型
有界流(bounded stream) 批量数据
- 有界流有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
- 有界流通常被称为有界数据集,数据的特点为有限不会改变的数据集合
常见的有界流
- T+1 的销售数据
- 11 月的汽车销售数量
- 2018 年全国电影票房
无界流(unbounded stream) 实时数据
- 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取数据,例如事件发生的顺序,以便能够推断结果的完整性。
- 无界流通常被称为无穷数据集,数据的特点为无穷集成的数据集合
常见的无界流
- 用户与客户断的实时交互数据
- 应用时产生的日志
- 金融市场的实时交易记录
有界流和无界流
数据运算模型
流式计算
- 只要数据一直在产生,计算就持续的进行
- 处理无界数据集
批处理
- 在预定义的时间内运行计算,当计算完成时释放计算机资源
- 处理有界数据集
Flink 组件栈
Deploy
本地 Local
- 一个 Java 虚拟机
Single JVM
(IDE 中直接运行)
集群 Cluster
- Standalone(start-cluster.sh)
- YARN
- MESOS
- K8s
云 Cloud
- GCE google
- AWS/EC2 amazon
- MapR
- Aliyun
Program Code
- Flink 应用程序代码
Job Client
- 任务执行起点,负责接受用户的程序代码、创建数据流、提交数据流给 Job Manager 、返回结果
Job Manager
- 作业管理器协调管理程序
Task Manager
- 从 Job Manager 接受需要部署的 Task
Runtime
Runtime 层提供了支持 Flink 计算的全部核心实现,比如:支持分布式 Stream 处理、JobGraph 到 ExecutionGraph 的映射、调度等等,为上层 API 层提供基础服务
API&Libaries
核心 APIs
DataSet API
:批处理,处理有界的数据集DataStream API
:流式处理,处理有界或无界的数据集
Table API
- 以表为中心声明的 DSL
select
、project
、join
、group-by
、aggregate
操作- 支持与
DataStream/DataSet
混合使用
SQL
Flink
提供的最高级抽象- 支持与
DataStream/DataSet
混合使用
面向批处理的 Lib
FlinkML
机器学习Gelly
图处理
面向流处理的类库
CEP
复杂事件处理SQL-Like Table
的关系操作