20200531——Flink的简介

Flink的引入

前言

大数据的飞速发展,出现了很多开源社区,Hadoop、Storm,以及Spark,他们都有各自的专注的应用场景。Spark开创了内存计算的先河,也以内存为赌注,赢得了内存计算的飞速发展,Spark的火热或多或少掩盖了其他分布式计算的系统身影,就像Flink,也就在这个时候默默的发展着。

DAG

DAG是有向无环图(Directed Acyclic Graph)的简称。在大数据处理中,DAG计算常常指的是将计算任务在内部分解成为若干个子任务,将这些子任务之间的逻辑关系或顺序构建成DAG(有向无环图)结构。
DAG在分布式计算中是非常常见的一种结构,在各个细分领域都可以看见它,比如Dryad,Flumejava和Tez,都是明确构建DAG计算模型的典型,再如流式计算的Storm等系统或机器学习框架Spark等,其计算任务大多也是DAG形式出现的,除此外还有很多场景都能见到。

DAG计算的三层结构:
最上层是应用表达层,即是通过一定手段将计算任务分解成由若干子任务形成的DAG结构,其核心是表达的便捷性,主要是方便应用开发者快速描述或构建应用。
中间层是DAG执行引擎层,主要目的是将上层以特殊方式表达的DAG计算任务通过转换和映射,将其部署到下层的物理机集群中运行,这层是DAG计算的核心部件,计算任务的调度,底层硬件的容错,数据与管理信息的传递,整个系统的管理与正常运转等都需要由这层来完成。
最下层是物理机集群,即由大量物理机器搭建的分布式计算环境,这是计算任务最终执行的场所。

分代

第一代:Hadoop承载的MapReduce、将计算分为两个阶段,分为Map和Reduce,对于上层应用来说,就不得不想方法设计去拆分算法。

第二代:由于这样的弊端,催生了支持DAG框架的诞生,因此,产生DAG的框架被划分为第二代计算引擎,如Tez以及更上层的Oozie,这里我们不去细究各种DAG实现之间的区别,不过对于当时的Tez和Oozie来说,大多数还是批处理的任务。

第三代:Spark第三代的计算引擎,第三代的计算引擎的特点主要是Job内部的DAG支持(不跨域job),以及强调的实时计算,在这里,很多人认为第三代计算引擎也能够很好的支持的运行批处理的Job

第四代:随着第三代计算引擎的出现,促进了上层应用快速发展,例如各种迭代计算的性能以及对流计算和SQL的支持,Flink的诞生就被归在了第四代,这应该主要是Flink对流计算的支持,以及更上一步的实时性上面,当然Flink也可以支持Batch的任务,以及DAG的运算。

总结

mr DAG框架(tez) Spark流批处理框架,内存计算(伪实时) Flink流批处理,内存计算(真正的实时计算)

flink vs spark

20200531——Flink的简介

什么是Flink

Flink图片

20200531——Flink的简介

Flink官方概述

Apache Flink是分布式,高性能,随时可以用以及准备的流处理应用程序打造的开源
Apache Flink是一个框架和分布式处理引擎,用于对*(流处理)和有界(批处理)数据流进行有状态计算,Flink被设计在所有常见的集群环境中运行,以内存执行速度和规模来执行计算。

Flink流处理特性

支持高吞吐,低延迟
支持带有事件时间的窗口
支持有状态计算的Exactly-once语义
支持高度灵活的窗口(Window操作),支持基于time,count,session,以及data-driven的窗口操作
支持具有背压功能的持续流模型
支持轻量级分布式快照(Snapshot)实现的容错
一个运行时同时支持Batch on Streaming 处理和Streaming处理
Flink在Jvm中内部实现了自己的内存管理
支持迭代计算
支持程序自动化,避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

Flink基石

Flink之所以能这么流行,离不开它的最重要的四个基石:Checkpoint、State、Time、Window

Checkpoint机制

Flink最重要的特性,Flink基于Chandy-Lamport算法实现了一个分布式的一致性的快照,从而提供了一致性的语义。

state

状态机制,flink天生支持state,state可以认为程序的中间计算结果,或者是历史计算结果

time

flink支持基于事件时间和处理时间进行计算,spark streaming只能按照process time进行处理。基于事件时间的计算我们可以解决数据迟到和乱序等问题。

window

flink提供了更多丰富的window,基于数量,session window 支持滑动窗口和滚动窗口

流批处理

批处理

批处理的特点是有界、大量、批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线计算。

流处理

特点是*、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时计算。

总结

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

Flink的流批处理

Flink是如何同时处理批处理和流处理?
Flink是将批处理(即处理有限的静态数据),视作一种特殊的流处理。

Flink的计算架构

Flink Runtime 执行引擎,是一个分布式系统,能够接受数据流程序并在一台或者多台机器上以容错方式执行。

Flink Runtime 执行引擎可以作为YARN(Yet Another Resource Negotiator)的应用程序在集群上运行,也可以在Nesos集群上,还可以在单机上运行

20200531——Flink的简介