Apache Flink简介 – 特性,构架和执行模型

1. Apache Flink简介

Apache Flink是一个开源平台,它是一个流数据流引擎,为数据流上的分布式计算提供通信,容错和数据分发。 Flink是Apache的顶级项目。 Flink是一个可扩展的数据分析框架,与Hadoop完全兼容。 Flink可以轻松执行流处理和批处理。

Apache Flink是在名为Stratosphere的项目下启动的。 2008年,Volker Markl有了Stratosphere的想法,吸引了来自HU Berlin,TU Berlin和Hasso Plattner Institute Potsdam的其他人员,他们共同致力于开源部署和系统构建方面,付出了巨大努力。 2014年4月成为Apache 的开源项目,Flink名称最终确定。 Flink是迅捷或敏捷的意思。

2. 为什么Flink?

Apache Flink的主要目的是克服并降低其他分布式数据驱动引擎所面临的复杂性, 通过使用MapReduce框架集成查询优化,以及高效的并行内存来实现。 由于Apache Flink主要基于流模型,Apache Flink使用流体系结构来迭代数据。 迭代算法与Flink查询优化器紧密相关。 Apache Flink的流处理架构可以以比微批量处理架构更低的延迟来处理流数据。

Apache Flink是真正的流处理框架(不会将流切割成微批量数据)。Flink可以高速地和低延迟地处理事件; Flink 作为一种大规模数据处理框架,可以处理以非常高的速度生成的数据。

Apache Flink是功能强大的开源平台,可以有效地满足以下类型的需求:

  • 批量处理

  • 交互处理 (Interactive processing)

  • 实时流处理

  • 图处理 (Graph Processing)

  • 迭代处理

  • 内存处理

Flink是MapReduce潜在的可替代大数据处理框架,它处理数据的速度比MapReduce快100多倍。 Flink独立于Hadoop,但它可以使用HDFS来读取,写入,存储,处理数据。 Flink不提供自己的数据存储系统。 它从分布式存储中获取数据。

3. Apache Flink生态系统

1542376062117596.png

上图显示了Apache Flink的完整生态系统。 生态系统图中有不同的层:

存储/流数据

Flink不附带存储系统;它只是一个计算引擎。 Flink可以从不同的存储系统读取,写入数据,也可以使用来自流数据系统。下面是Flink可以读取写入数据的存储/流数据系统的列表:

HDFS – Hadoop分布式文件系统

Local-FS – 本地文件系统

S3 – 来自亚马逊的简单存储服务

HBase – Hadoop生态系统中的NoSQL数据库

MongoDB – NoSQL数据库

RBDBMs – 任何关系数据库

Kafka – 分布式消息队列

RabbitMQ – 消息队列

Flume – 数据收集和聚合工具

第二层是部署/资源管理。 Flink可以采用以下方式部署:

本地模式 – 在单个节点上,在单个JVM中

集群 – 在多节点群集上,具有以下资源管理器:

Standalone – Flink附带的默认资源管理器;

YARN – 是Hadoop的一部分,在Hadoop 2.x中引入;

Mesos – 一个通用的资源管理器;

Cloud – 在亚马逊或谷歌云上;

下一层是Runtime – Distributed Streaming Dataflow,也称为Apache Flink的内核。这是flink的核心层,提供分布式处理,容错,可靠性,本机迭代处理能力等。

最上层用于API和库,它为Flink提供了多种功能;

DataSet API

处理有限的的数据集,允许用户在数据集上实现map(映射),过滤,连接(join),分组(group)等操作。 主要用于分布式数据处理。 实际上,有限数据集的处理是流处理的一个特例。 批数据处理应用程序也在流处理运行时的环境执行。

DataStream API

处理连续的数据流。 为了处理实时数据流,它提供各种操作,如映射,过滤,更新状态,window (时间窗口),聚合等。它可以使用来自各种流数据源,并可以将数据写入不同的Sink (接收器 )。 它支持Java和Scala。

Table

它使用户能够使用SQL等表达式语言对具有关系的数据流和批处理进行即时分析。它可以嵌入到DataSet和DataStream API中。通过该Table Lib,用户无需编写复杂的代码来处理数据,并且允许用户在Flink的上面运行SQL查询。

FlinkML

机器学习库,提供直观的API和高效的算法来处理机器学习应用程序。它是用Scala编写的。机器学习算法本质上是迭代的,Flink为迭代算法提供了很好的支持,以便非常有效地处理的算法。

4. Flink 架构

1542376193326614.png

Flink以Master-Slave方式工作。 Master是集群的管理节点(Manager Node),其中slave是工作节点。 如上图所示,master是集群的核心,客户端可以在其中提交作业请求。 现在,master将分割工作并将其提交给集群中的Slave服务器, 通过这种方式,Flink享有分布式计算能力,使Flink能够以极快的速度处理数据。

1542376237115091.png

主节点和从节点有两种类型的节点。 在主节点上,运行“作业管理器”(Job Manager)的Flink主守护程序,并在所有从节点上配置称为“任务管理器” (Task Manager) 的Flink的从守护程序。

5. Flink 特性

现在让我们在这个Apache Flink教程中学习Apache Flink的功能 – 

Streaming – Flink是一个流处理引擎;

高性能 – Flink的数据流提供非执行引擎具有非常高的吞吐量;Flink以极快的速度处理数据;

低延迟 – Flink可以在没有任何延迟的情况下处理数据;

事件和无序事件 – Flink支持事件到达延迟或无序的流处理和时间窗口;

容错 – 硬件,节点,或进程的故障不会影响集群;

支持各种集成 – Flink可以与各种存储系统集成以处理其数据,可以使用各种资源管理工具进行部署,它还可以与多个BI工具集成以进行报告;

程序优化器 (Program optimizer) – Flink 内有一个优化器,在执行程序之前进行了优化;

可扩展 – Flink具有高度可扩展性。随着需求的增加,可以扩展flink集群;

运算符 (operator)– Flink有许多预定义的运算符来处理数据,可以使用这些运算符完成所有常见操作;

有且仅且执行一次语义 – 它可以在计算过程中帮组保持自定义状态;

高度灵活的流数据窗口 (Streaming Window) – 在flink中,可以通过灵活地触发条件来自定义窗口,以获得所需的流模式。可以根据时间t1到t5和数据驱动的窗口创建窗口。

可以用于流处理和批处理的数据处理框架 – 批处理和数据流在flink中都有共同的运行时;

易于理解的可编程API – Flink的API以覆盖所有常见操作的方式开发,程序员可以高效地使用这些API;

6. 数据集转换 (Dataset Transformations)

Map – 需要1个元素作为输入,并产生1个元素作为输出;

FlatMap – 需要1个元素并产生0个或更多元素作为输出;

过滤器 – 为每个元素计算Boolean表达式并保留那些返回为true的记录;

KeyBy – 将数据分为不相交的分区,每个分区都具有相同Key的元素;

Union,Join,Split,select,window等是用于处理数据的常用运算符;

7. Flink执行模型 

——add picture here——

如上图所示,是在Flink中执行应用程序的步骤:

程序 – 应用程序由开发人员编写;

解析和优化 (Parse & Optimize)- 在此步骤中完成代码解析,类型提取和优化;

DataFlow Graph – 将每个作业转换为数据流图。

作业管理器(Job Manager) – 作业管理器在任务管理器上安排任务; 保持数据流元数据。 作业管理器部署操作运算并监视中间任务结果;

任务管理器 – 任务在任务管理器上执行,它们是工作节点;

Apache Flink简介 – 特性,构架和执行模型

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 二 =