微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

事件驱动应用与传统应用的区别

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐