Flink基本理论概述

一、技术演变

1.1 流处理语义

(1)At most once(最多一次):每条数据记录最多被处理一次,潜台词也表明数据会有丢失(没被处理掉)的可能。

(2)At least once(最少一次):每条数据记录至少被处理一次。这个比上一点强的地方在于这里至少保证数据不会丢,至少被处理过,唯一不足之处在于数据可能会被重复处理。

(3)Exactly once(恰好一次):每条数据记录正好被处理一次。没有数据丢失,也没有重复的数据处理。这一点是3个语义里要求最高的。

1.2 Flink和Storm框架对比

Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Storm在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。Flink在近期倍受关注,具有高吞吐低延迟高可靠精确计算等特性,对事件窗口有很好的支持,目前在美团点评实时计算业务中也已有一定应用。

Flink 与 Storm 两个框架对比:

Storm Flink
状态管理 无状态,需用户自行进行状态管理 有状态
窗口支持 对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算 窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态。
消息投递 At Most Once 、At Least Once At Most Once、 At Least Once、 Exactly Once
容错方式 ACK机制 :对每个消息进行全链路跟踪,失败或超时进行重发。 检查点机制 :通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。
应用现状 在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。 在美团点评实时计算业务中已有一定应用,但是管理平台、API 及文档等仍需进一步完善。

于是,Flink出现了,这一技术框架可以避免上述弊端,并且拥有所需的诸多功能,还能按照连续事件高效地处理数据,Flink的部分特性如下图所示:
在这里插入图片描述

二、差异性分析

(1)数据量&吞吐量&延迟性
在这里插入图片描述
Flink 的流处理引擎只需要很少配置就能实现高吞吐率和低延迟。

(2)支持 Event Time 和乱序事件

Flink 支持了流处理和 Event Time 语义的窗口机制。
Event time 使得计算乱序到达的事件或可能延迟到达的事件更加简单
在这里插入图片描述

(3)状态计算的 exactly-once 语义

流程序可以在计算过程中维护自定义状态。

Flink 的 checkpointing 机制保证了即时在故障发生下也能保障状态的 exactly once 语义。
在这里插入图片描述

(4)高度灵活的流式窗口

Flink 支持在时间窗口,统计窗口,session 窗口,以及数据驱动的窗口。

窗口可以通过灵活的触发条件来定制,以支持复杂的流计算模式。
在这里插入图片描述

(5)带反压的连续流模型

数据流应用执行的是不间断的(常驻)operators。

Flink streaming 在运行时有着天然的流控:
慢的数据 sink 节点会反压(backpressure)快的数据源(sources)
在这里插入图片描述

(6)容错性

Flink 的容错机制是基于 Chandy-Lamport distributed snapshots 来实现的。

这种机制是非常轻量级的,允许系统拥有高吞吐率的同时还能提供强一致性的保障。
在这里插入图片描述

(7)Batch 和 Streaming 一个系统流处理和批处理共用一个引擎

Flink 为流处理和批处理应用公用一个通用的引擎。批处理应用可以以一种特殊的流处理应用高效地运行
在这里插入图片描述

(8)内存管理

Flink 在 JVM 中实现了自己的内存管理。

应用可以超出主内存的大小限制,并且承受更少的垃圾收集的开销。
在这里插入图片描述

(9)迭代和增量迭代

Flink 具有迭代计算的专门支持(比如在机器学习和图计算中)。

增量迭代可以利用依赖计算来更快地收敛。
在这里插入图片描述

(10)程序调优

批处理程序会自动地优化一些场景,比如避免一些昂贵的操作(如 shuffles 和 sorts),还有缓存一些中间数据。
在这里插入图片描述

三、初识Flink

Flink起源于Stratosphere项目,Stratosphere是在2010~2014年由3所地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目,2014年4月Stratosphere的代码被复制并捐赠给了Apache软件基金会,参加这个孵化项目的初始成员是Stratosphere系统的核心开发人员,2014年12月,Flink一跃成为Apache软件基金会的顶级项目。
在德语中,Flink一词表示快速和灵巧,项目采用一只松鼠的彩色图案作为logo,这不仅是因为松鼠具有快速和灵巧的特点,还因为柏林的松鼠有一种迷人的红棕色,而Flink的松鼠logo拥有可爱的尾巴,尾巴的颜色与Apache软件基金会的logo颜色相呼应,也就是说,这是一只Apache风格的松鼠。
在这里插入图片描述

Flink主页在其顶部展示了该项目的理念:“Apache Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架”。
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。
在这里插入图片描述

四、批处理与流处理

批处理的特点是有界、持久、大量,批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计
流处理的特点是无界、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计

在Spark生态体系中,对于批处理和流处理采用了不同的技术框架,批处理由SparkSQL实现,流处理由Spark Streaming实现,这也是大部分框架采用的策略,使用独立的处理器实现批处理和流处理,而Flink可以同时实现批处理和流处理。

Flink是如何同时实现批处理与流处理的呢?
答案是:Flink将批处理(即处理有限的静态数据)视作一种特殊的流处理

Flink的核心计算架构是下图中的Flink Runtime执行引擎,它是一个分布式系统,能够接受数据流程序并在一台或多台机器上以容错方式执行。

Flink Runtime执行引擎可以作为YARN(Yet Another Resource Negotiator)的应用程序在集群上运行,也可以在Mesos集群上运行,还可以在单机上运行(这对于调试Flink应用程序来说非常有用)。
在这里插入图片描述

上图为Flink技术栈的核心组成部分,值得一提的是,Flink分别提供了面向流式处理的接口(DataStream API)和面向批处理的接口(DataSet API)。因此,Flink既可以完成流处理,也可以完成批处理。Flink支持的拓展库涉及机器学习(FlinkML)、复杂事件处理(CEP)、以及图计算(Gelly),还有分别针对流处理和批处理的Table API。

能被Flink Runtime执行引擎接受的程序很强大,但是这样的程序有着冗长的代码,编写起来也很费力,基于这个原因,Flink提供了封装在Runtime执行引擎之上的API,以帮助用户方便地生成流式计算程序。Flink 提供了用于流处理的DataStream API和用于批处理的DataSet API。值得注意的是,尽管Flink Runtime执行引擎是基于流处理的,但是DataSet API先于DataStream API被开发出来,这是因为工业界对无限流处理的需求在Flink诞生之初并不大。

DataStream API可以流畅地分析无限数据流,并且可以用Java或者Scala来实现。开发人员需要基于一个叫DataStream的数据结构来开发,这个数据结构用于表示永不停止的分布式数据流。

Flink的分布式特点体现在它能够在成百上千台机器上运行,它将大型的计算任务分成许多小的部分,每个机器执行一部分。Flink能够自动地确保发生机器故障或者其他错误时计算能够持续进行,或者在修复bug或进行版本升级后有计划地再执行一次。这种能力使得开发人员不需要担心运行失败。Flink本质上使用容错性数据流,这使得开发人员可以分析持续生成且永远不结束的数据(即流处理)。

总结:

无穷数据集:无穷的持续集合的数据集合
无穷数据集:有限不会改变的数据集合

(1)常见的无穷数据集合

用户与客户端的实时交互数据
应用实时产生的日志
金融市场的实时交易记录

(2)数据运算模型

流式:只要数据一直产生,计算就持续的进行
批处理:在预先定义的时间内运行计算、当完成时释放计算机资源

总结:Flink既可以处理有界数据集、也可以处理无界数据集。既可以处理流式数据、也可以批量的处理数据

五、Flink应用场景

Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化精密的状态管理事件时间支持以及精确一次的状态一致性保障等。

Flink 不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。

事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上。

(1)事件驱动型应用

反欺诈
异常检测
基于规则的报警
业务流程监控
Web应用

(2)数据分析应用

电信网路质量监控
移动应用中的产品更新及实验评估分析
大规模图分析

(3)数据管道应用

电子商务中的实时查询索引构建
电子商务中的持续ETL

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/106294944