首页 > 其他分享 >Flink基本概念及架构

Flink基本概念及架构

时间:2023-02-21 18:25:09浏览次数:45  
标签:状态 架构 处理 Flink API 计算 数据 基本概念

1、基本概念

无界和有界数据。任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。数据可以被作为 无界 或者 有界 流来处理。

无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。

有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。

 

Apache Flink 擅长处理无界和有界数据集。精确的时间控制和状态化使得 Flink 的运行时能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。

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

 

应用状态是 Flink 中的一等公民,Flink 提供了许多状态管理相关的特性支持,其中包括:

  • 多种状态基础类型:提供多种状态基础类型,例原子值(value),列表(list)以及映射(map);
  • 插件化的State Backend: State Backend 负责管理应用程序状态,并在需要的时候进行 checkpoint。Flink 支持多种 state backend,可将状态保存在 内存 或 Rocks DB,以及自定义 state backend 进行状态存储。
  • 精确一次语义:Flink 的 checkpoint 和故障恢复算法保证了故障发生后应用状态的一致性。Flink 能够在应用程序发生故障时,对应用程序透明,不造成正确性的影响。
  • 超大数据量状态:Flink 能够利用其异步以及增量式的 checkpoint 算法,存储数 TB 级别的应用状态。
  • 可弹性伸缩的应用:Flink 能够通过在更多或更少的工作节点上对状态进行重新分布,支持有状态应用的分布式的横向伸缩。

时间是流处理应用另一个重要的组成部分。因为事件总是在特定时间点发生,所以大多数的事件流都拥有事件本身所固有的时间语义。进一步而言,许多常见的流计算都基于时间语义,例如窗口聚合、会话计算、模式检测和基于时间的 join。流处理的一个重要方面是应用程序如何衡量时间,即区分事件时间(event-time)和处理时间(processing-time)。

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

API。Flink将数据处理接口抽象成四层:

  • SQL API:SQL语言的学习成本低,能够让数据分析人员和开发人员快速上手,帮助其更加专注业务本身而不受限于复杂的编程接口,可以通过SQL API完成对批计算和流计算的处理;
  • Table API:将内存中 DataStream 和 DataSet 在原有的基础上增加Schema信息,将数据类型统一抽象成表结构,然后通过Table API提供的接口处理对应的数据集;
  • DataStream/DataSet API:主要面向具有开发经验的用户,用户可以根据API处理无界流数据和批量数据;
  • Stateful Stream Processing:是Flink中最底层的开发接口,可以使用接口中操作状态、时间等底层数据,可以实现非常复杂的流式计算逻辑。

API越接近 SQL 层,表达能力会逐步减弱,抽象能力会增强。反之越接近底层,API 的表达能力越强,可以进行多种灵活方便的操作,但抽象能力也相对越小。

 

2、架构

了解一个系统,基本都是从架构开始。系统由哪些组件组成,安装时各节点需要启动哪些服务,各个服务之间如何交互协调,这些都是首先需要了解的。Flink系统的架构与Spark类似,也是基于Master-Slave风格的架构,如下图所示:

 

Flink集群启动时,会启动一个JobManager进程、至少一个TaskManager进程

JobManager

  • Flink系统的协调者,负责接受 Job ,调度组成Job的多个Task的执行
  • 收集Job的状态信息,并管理Flink集群中从节点 TaskManager

TaskManager

  • 负责执行计算的Worker,在其上执行Flink Job的一组Task
  • TaskManager负责管理其所在节点上的资源信息,如内存、磁盘、网络,在启动的时候将资源的状态向 JobManager 汇报

Client

  • 用户提交一个Flink程序时,会首先创建一个Client。Client首先会对提交的Flink程序进行预处理,并提交到Flink集群
  • Client会将用户提交的Flink程序组装JobGraph,最终以JobGraph的形式提交

3、Flink组件栈

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

Flink 分层架构,从上到下依次是:API & Libraries 层、Runtime 核心层 和 物理部署层。

 

API & Libraries 层Flink 同时提供流计算和批计算的接口,并在此基础上抽象出不同的应用类型的组件库。如基于流处理的 CEP (复杂事件处理库),SQL & TABLE 库 和 基于批处理的机器学习库(FlinkML)、图处理库(Gelly)。

API 层包括构建流计算应用的 DataStream API 和批计算应用的 DataSet API,两者都是提供给用户丰富的数据处理高级 API,例如 Map,FlatMap 等。同时也提供比较低级的 Process Function API ,用户可以直接操作状态和时间等底层数据。

Runtime 核心层该层负责为上层接口提供基础服务,也是 Flink 分布式计算框架的核心实现层。支持分布式 Stream 作业的执行、JobGraph 到 ExecutionGraph 的映射转换、任务调度等。将 DataStream 和 DataSet 转成统一的可执行的 Task Operator,达到在流式引擎下同时处理批量计算和流式计算的目的。

物理部署层该层主要涉及 Flink 的部署模式,目前 Flink 支持多种部署模式:本地、集群(Standalone / YARN)、云(GCE / EC2)、kubenetes。Flink 能够通过该层支持不同平台的部署,用户可以根据需要选择使用对应的部署模式。

我会不间断的更新,维护,希望可以对正在找大数据工作的朋友们有所帮助。

 

标签:状态,架构,处理,Flink,API,计算,数据,基本概念
From: https://www.cnblogs.com/qian-fen/p/17141966.html

相关文章

  • 《架构漫谈》读后感
    近几天在老师的推荐下,读了架构漫谈,《架构漫谈》是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构、怎样做好架构、软件架......
  • 云小课|MRS基础原理之Flink组件介绍
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击......
  • 微服务架构中的用户认证方案
    传统的用户认证方案我们直奔主题,什么是用户认证呢?对于大多数与用户相关的操作,软件系统首先要确认用户的身份,因此会提供一个用户登录功能。用户输入用户名、密码等信息,后台......
  • 实践篇(三):如何有效评审软件架构图?
    作者:京东科技 倪新明设计意图的传达是架构可视化关注的重要维度,在技术方案评审过程中不可避免的会出现各种各样的架构图或设计图,这些图形化表述在设计意图传达效果层面表......
  • Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<二>---后端架构完善与接口开发
    数据库准备:在上一次https://www.cnblogs.com/webor2006/p/17114996.html已经将SpringBoot相关的配置环境给搭建好了,接下来则需要为咱们的项目创建一个数据库。1、mysql的......
  • ETL的架构设计和实现及其优势
    目录ETL的架构ETL架构的优势:离线ETL的架构设计离线ETL的模块实现数据分片(Split)数据解析清洗(Read)多文件落地(Write)检测数据消费完整性(Commit)参考链接ETL的架构ETL架......
  • 基本概念
    查看系统的一些指令:uname-a命令可以直接显示Linux系统架构的命令dpkg --print-architecture可以查看操作系统是32位还是64位,如果当前Linux是64位则输出amd......
  • 地理图形标记语言GML的架构及范例
    一、前言在信息高速公路的时代,如何能在不同的GIS系统间实时分享资料,是刻不容缓的问题,现在该问题已经有了一个很好解决案,那就是以XML为基础的GIS编码标准,称为地理图形标记......
  • 互联网架构的演进的历程
    单体架构设计何为单体架构?所有业务都在同一台web服务器上,web服务器和数据库服务器部署在同一台电脑上。单体架构的特点?优点:部署简单,维护方便。缺点:存储能力有限,计算......
  • 项目开发软件架构选择指南
    从系统的组织和部署结构方面来看,软件架构的演化进程显然有着从简单到复杂的趋势。那是否最新最复杂的架构就是目前业界选择的最佳架构呢?非也。没有最好的架构,只有最合适的......