Flink概述
作者:互联网
Flink产生缘由
随着大数据时代的发展,海量数据和多种业务的实时处理需求激增,比如:
- 实时监控报警系统;
- 实时风控系统;
- 实时推荐系统等等。
传统的批处理方式和早期的流式处理框架因其自身的局限性,难以在延迟性、吞吐量、容错能力,以及使用便捷性等方面满足业务日益苛刻的要求。
在这种形势下,Flink 以其独特的天然 流式计算特性和更为先进的架构设计 ,极大地改善了以前的流式处理框架所存在的问题。
Flink定义
Apache Flink :是一个分布式流处理器,具有直观和富有表现力的 API,可实现有状态的流处理应用程序,它以容错的方式有效地大规模运行这些应用程序,还提供了有状态的计算,支持状态管理,支持强一致性的数据语义以及支持基于Event Time的WaterMark对延迟或乱序的数据进行处理等。
Flink官方地址:https://flink.apache.org/
Flink组件栈
Flink分层的组件栈如下图所示(每一层所包含的组件都提供了特定的抽象,用来服务于上层组件):
主要分为如下几层:
- 物理部署层
- Runtime核心层
- API&Libraries层
- 扩展
物理部署层
Flink 支持的部署模式:
- 本地:本地运行
- 集群:独立集群(Standalone)、Yarn管理的集群
- 云上:GCE/EC2
- 容器化部署:Kubenetes
Flink能够通过该层支持不同平台的部署,用户可以根据需要选择使用对应的部署模式。
Runtime核心层
- 提供了支持Flink计算的全部核心实现,为上层API层提供基础服务,该层主要负责对上层不同接口提供基础服务,也是Flink分布式计算框架的核心实现层;
- 支持分布式Stream作业的执行、JobGraph到ExecutionGraph的映射转换、任务调度等;
- 将DataSteam和DataSet转成统一的可执行的Task Operator,达到在流式引擎下同时处理批量计算和流式计算的目的。
API & Libraries层
- Flink 首先支持了 Scala和 Java 的 API,Python也正在测试中;
- DataStream、DataSet、Table、SQL API,作为分布式数据处理框架,Flink同时提供了支撑计算和批计算的接口,两者都提供给用户丰富的数据处理高级API,例如Map、FlatMap操作等,也提供比较低级的Process Function API,用户可以直接操作状态和时间等底层数据
扩展库
- Flink 还包括用于复杂事件处理的CEP,机器学习库FlinkML,图处理库Gelly等。
- Table 是一种接口化的 SQL支持,也就是 API支持(DSL),而不是文本化的SQL解析和执行。
Flink 四大基石
如上图,Fink有四大基石,分别为:
- Checkpoint
- State
- Time
- Window
Checkpoint
Checkpoint是Flink最重要的一个特性。
Flink基于 Chandy-Lamport 算法实现了一个分布式的一致性的快照,从而提供了一致性的语义。
Chandy-Lamport算法实际上在1985年的时候已经被提出来,但并没有被很广泛的应用,而Flink则把这个算法发扬光大了。
State
在提供了一致性的语义之后,Flink为了让用户在编程时能够更轻松、更容易地去管理状态,还提供了一套非常简单明了的State API,包括里面的有ValueState、ListState、MapState及BroadcastState。
使用State API能够自动享受到这种一致性的语义。
Time
除此之外,Flink还实现了Watermark的机制,能够支持基于事件的时间(Time)的处理,能够容忍迟到/乱序的数据。
Window
另外流计算中一般在 对流数据进行操作之前 都会先进行开窗(Window),即:基于一个什么样的窗口上做这个计算。
Flink提供了开箱即用的各种窗口,比如滑动窗口、滚动窗口、会话窗口以及非常灵活的自定义的窗口。
Flink 应用场景
Flink的应用场景主要在这三个方面:
- 事件驱动:Event-driven Applications
- 数据分析:Data Analytics Applications
- 数据管道:Data Pipeline Applications
事件驱动(Event-driven Applications)
事件驱动应用与传统应用的区别
标签:提供,Flink,支持,API,概述,流式,计算 来源: https://www.cnblogs.com/xfeiyun/p/16319850.html