相对于传统的离线计算会存在数据反馈不及时的问题,很难满足急需实时数据做决策的场景Flink是对有界数据和无界数据进行有状态计算的分布式引擎,它是纯流式处理模式。纯流式模式保证了Flink的低延迟,使其在诸多的实时计算引擎竞争中具有优势。
Apache Flink 是一个开源的、分布式、高性能、高可用的大数据处理引擎,支持实时流stream处理和批batch处理。可部署在各种集群环境,例如k8s、YARN、Mesos,对各种大小的数据规模进行快速计算。
一、Flink架构
Flink是分层架构的分布式计算引擎,每层的实现依赖下层提供的服务,同时提供抽象的接口和服务供上层使用。Flink 架构可以分为4层,包括Deploy部署层、Core核心层、API层和Library层。
Deploy 层∶该层主要涉及Flink的部署模式,Flink支持多种部署模式——本地、集群(Standalone/YARN)和云服务器(GCE/EC2)。
Core 层∶该层提供了支持Flink计算的全部核心实现,为API层提供基础服务。
API层∶该层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中流处理对应DataStream API,批处理对应DataSet API。
Library 层∶该层也被称为Flink应用框架层,根据API层的划分,在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类。面向流处理支持CEP(复杂事件处理)、基于SQL-like的操作(基于Table的关系操作);面向批处理支持FlinkML(机器学习库)、Gelly(图处理)、Table操作。
Flink 的底层是 Deploy,Flink 可以在 Local模式运行,也可以在 Cluster 集群(如 Standalone、YARN)模式运行,另外 Flink 还可以在 Cloud模式运行,如 GCE(谷歌云服务)和EC2(亚马逊云服务)。Flink的架构如图所示。
Deploy 的上层是Flink的核心(Core)部分Runtime,在Runtime之上提供了两套核心的 API∶DataStream API(流处理)和DataSet API(批处理)。在核心API之上又扩展了一些高阶的库和API,比如 CEP 流处理、Table API 和 SQL、FlinkML 机器学习库、Gelly 图计算。SQL 既可以运行在DataStreamAPI上,又可以运行在DataSet API上。
二、Flink的优势
Flink架构主要包含以下优点。
1.支持有状态计算的 Exactly-once 语义。状态是指 Flink 能够维护数据在时序上的聚类和聚合,同时它的checkpoint机制可以方便快捷地进行失败重试。
2.支持带有事件时间(event time)语义的流处理和窗口处理。事件时间的语义使流计算的结果更加精确,尤其在事件到达无序或延迟的情况下。
3.支持高度灵活的窗口(window)操作。支持基于time、count、session 和data-driven 的窗口操作,能很好地对现实环境中创建的数据进行建模。
4.支持轻量的容错处理(fault tolerance)。它使得系统既能保持高吞吐率又能保证exactly-once的一致性。通过轻量的state snapshots 实现。
5.支持高吞吐、低延迟、高性能的流处理。
6.支持savepoints机制。即可以将应用的运行状态保存下来,在升级应用或处理历史数据时能够做到无状态丢失和最小停机时间。
7.支持大规模的集群模式,支持多种运行模型,例如YARN、Mesos,
可运行在成千上万的节点上。
8.支持具有Backpressure功能的持续流模型。
9.Flink在JVM内部实现了自己的内存管理。
10.支持迭代计算。
11.支持程序自动优化。避免特定情况下 Shuffle、排序等昂贵操作,中间结果进行缓存。
三、Flink的应用场景
Flink主要应用于以下流式数据分析场景:
●实时ETL∶具有对数据灵活加工的能力,数据实时清洗、归并和结构化处理。对离线数据进行补充,并为数据实时传输提供可计算通道。
● 实时报表∶实时化采集、加工流式数据存储;
● 监控预警∶对系统和用户行为进行实时检测和分析,以便及时发现危险行为。
● 在线系统∶实时计算各类数据指标,并利用实时结果及时调整在线系统的相关策略,在各类内容投放、无线智能推送领域有大量的应用。