Flink
Flink 基本介绍
-
Flink概述 官网
分布式的计算引擎 支持批处理 ,即处理静态的数据集、历史的数据集 支持流处理 ,即实时地处理一些实时数据流 支持基于事件 的应用【比如说滴滴通过 Flink CEP 实现实时监测司机的行为流来判断司机的行为是否正当】
-
Apache Flink – Stateful Computations over Data Streams
Stateful Computations over Data Streams ,即数据流上的有状态的计算。
- Data Streams ,Flink认为 有界数据集 是 无界数据流 的一种特例,所以说有界数据集也是一种数据流,事件流也是一种数据流。 Everything is streams ,即Flink可以用来处理任何的数据,可以支持批处理、流处理、AI、MachineLearning等等。
- Stateful Computations,即 有状态计算 。有状态计算是最近几年来越来越被用户需求的一个功能。比如说一个网站一天内访问UV数,那么这个UV数便为 状态 。Flink提供了内置的对状态的一致性的处理,即如果任务发生了Failover,其状态不会丢失、不会被多算少算,同时提供了非常高的性能.
无界流 :意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整
有界流 :也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为 批处理 。
- 其他特点:
- 性能优秀
- 高可扩展性
- 支持容错
- 纯内存式的计算引擎,做了内存管理方面的大量优化
- 支持eventime的处理
- 支持超大状态的Job(在阿里巴巴中作业的state大小超过TB是非常常见的)
- 支持exactly-once 的处理
Flink 架构
Flink基石
-
Checkpoint
Checkpoint 机制,这是Flink最重要的一个特性。Flink基于 Chandy-Lamport 算法实现了一个分布式的一致性的快照,从而提供了 一致性的语义 。Chandy-Lamport算法实际上在1985年的时候已经被提出来,但并没有被很广泛的应用,而Flink则把这个算法发扬光大了。
-
State
Flink为了让用户在编程时能够更轻松、更容易地去 管理状态 ,还提供了一套非常简单明了的State API,包括里面的有ValueState、ListState、MapState,近期添加了BroadcastState,使用State API能够自动享受到这种一致性的语义。
-
Time
Flink实现了 Watermark 的机制,能够支持基于事件的时间的处理,或者说基于系统时间的处理,能够容忍数据的迟到,容忍,乱序的数据。
-
Window
流计算中一般在对流数据进行操作之前都会先进行开窗,即基于一个什么样的窗口上做这个计算。Flink提供了开箱即用的各种窗口,比如 滑动窗口 、 滚动窗口 、 会话窗口 以及非常灵活的 自定义的窗口 。
组件栈
Flink是一个分层架构的系统,每一层所包含的组件都提供了特定的抽象,用来服务于上层组件。