Flink入门-基础概念

2020-07-09  本文已影响0人  zfylin

Apache Flink 是一个分布式大数据处理引擎,可对有界数据流无界数据流进行有状态无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计。

简介

Flink诞生于欧洲的一个大数据研究项目StratoSphere。该项目是柏林工业大学的一个研究性项目。早期,Flink是做Batch计算的,但是在2014年,StratoSphere里面的核心成员孵化出Flink,同年将Flink捐赠Apache,并在后来成为Apache的顶级大数据项目,同时Flink计算的主流方向被定位为Streaming,即用流式计算来做所有大数据的计算,这就是Flink技术诞生的背景。

2015开始阿里开始介入Flink 负责对资源调度和流式sql的优化,成立了阿里内部版本Blink在最近更新的1.10版本中,Blink合并入Flink。

特性

概念

Streams

流,分为有界数据流与无界数据流

有界流&无界流

State

状态是计算过程中的数据信息,在容错恢复和 Checkpoint 中有重要的作用,流计算在本质上是 Incremental Processing,因此需要不断查询保持状态;另外,为了确保 Exactly- once 语义,需要数据能够写入到状态中;而持久化存储,能够保证在整个分布式系统运行失败或者挂掉的情况下做到 Exactly- once,这是状态的另外一个价值。

Time

分为 Event time、Ingestion time、Processing time,Flink 的无限数据流是一个持续的过程,时间是我们判断业务状态是否滞后,数据处理是否及时的重要依据。

架构

基本组件栈

Flink基础组件栈

Flink的架构遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口。

Flink分为架构分为三层,由上往下依次是API&Libraries层、Runtime核心层以及物理部署层。

基本架构图

1.png

Flink系统主要由两个组件组成,分别为JobManager和TaskManager,Flink架构也遵循Master-Slave架构设计原则,JobManager为Master节点,TaskManager为Worker(Slave)节点。所有组件之间的通信都是借助于Akka Framework,包括任务的状态以及Checkpoint触发等信息。

项目依赖

Flink系统代码分为多个子项目。目的是减少实现Flink程序的项目所需的依赖项数量,并促进更轻松地测试较小的子模块。 下图显示了各个项目及其依赖性。

1.png

除了上图中列出的项目,Flink当前还包含以下子项目:

编程模型

2.png

Flink 提供几种不同层次的抽象来开发 流/批(streaming/batch)程序

应用场景

数据管道

数据管道应用

Data Pipeline 的核心场景类似于数据搬运并在搬运的过程中进行部分数据清洗或者处理,而整个业务架构图的左边是 Periodic ETL,它提供了流式 ETL 或者实时 ETL,能够订阅消息队列的消息并进行处理,清洗完成后实时写入到下游的 Database 或 File system 中。

实时数仓

当下游要构建实时数仓时,上游则可能需要实时的 Stream ETL。这个过程会进行实时清洗或扩展数据,清洗完成后写入到下游的实时数仓的整个链路中,可保证数据查询的时效性,形成实时数据采集、实时数据处理以及下游的实时 Query。

搜索引擎推荐

搜索引擎这块以淘宝为例,当卖家上线新商品时,后台会实时产生消息流,该消息流经过 Flink 系统时会进行数据的处理、扩展。然后将处理及扩展后的数据生成实时索引,写入到搜索引擎中。这样当淘宝卖家上线新商品时,能在秒级或者分钟级实现搜索引擎的搜索。

数据分析

数据分析应用

如图,左边是 Batch Analytics,右边是 Streaming Analytics。Batch Analysis 就是传统意义上使用类似于 Map Reduce、Hive、Spark Batch 等,对作业进行分析、处理、生成离线报表,Streaming Analytics 使用流式分析引擎如 Storm,Flink 实时处理分析数据,应用较多的场景如实时大屏、实时报表。

数据驱动

数据驱动应用

从某种程度上来说,所有的实时的数据处理或者是流式数据处理都是属于数据驱动,流计算本质上是 数据驱动 计算。应用较多的如风控系统,当风控系统需要处理各种各样复杂的规则时,数据驱动就会把处理的规则和逻辑写入到 Datastream 的 API 或者是 ProcessFunction 的 API 中,然后将逻辑抽象到整个 Flink 引擎中,当外面的数据流或者是事件进入就会触发相应的规则,这就是数据驱动的原理。在触发某些规则后,数据驱动会进行处理或者是进行预警,这些预警会发到下游产生业务通知,这是数据驱动的应用场景数据驱动在应用上更多应用于复杂事件的处理。

上一篇下一篇

猜你喜欢

热点阅读