流/批/OLAP 一体的 Flink 引擎介绍(课前)

355 阅读8分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

Apache Flink 概述

大数据时代发展背景及面临问题

大数据是大数据时代之下系统演化结果,是更加贴近大数据场景下用户处理数据的诉求,而非开历史倒车。大数据、大数据,我们讨论的就是一个“数据爆炸”时代下如何进行有效地大规模数据处理问题。这个问题是数据库之前未曾遇到、也未曾解决的特定问题,这些数据可能非结构化、非关系化,可能是半结构化的 Nginx 日志或者是用户上传的图片、再或者可能是整个城市大脑的交通探头高清视频数据。这些数据用传统的、狭义的关系型数据库无法解决,因此大数据方案舍弃了数据库模型中当前不适合上述数据处理的特性,牺牲某些功能从而换取大规模数据处理之能力。随着整个物理世界更多地数据化,更多更垂直更定制化的大数据系统将源源不断产生,以应对快速爆炸的数据时代。对流式计算的需求...

Google三驾马车

  • 分布式文件系统GFS
  • 分布式计算框架MapReduce
  • Bigtable

source:大数据十年回顾:浪潮之巅数英雄

Hadoop发展史(MapReduce)

批处理框架的代表,第一个在开源社区获得极大关注的大数据处理框架,Hadoop 是一种分布式计算的基础架构,迄今为止 Hadoop 已经形成了一个广阔的生态圈,内部实现了大量的算法和组件,其核心有两个:HDFS(Hadoop的分布式文件系统) 和 MapReduce(分布式任务处理架构)。Hadoop 的核心机制是通过 HDFS 和 MapReduce 进行数据存储、内存和程序的有效利用与管理。通过 Hadoop 把由多台普通的、廉价的服务器组合成分布式的计算-存储集群,从而提供大数据的存储和处理能力。

Hadoop 及其 MapReduce 处理引擎提供了一套久经考验的批处理模型,以其可靠、高效、可伸缩的特点使人们能很方便地处理海量数据。允许用户通过很低成本的组件即可搭建完整功能的 Hadoop 集群,因此这种廉价而高效的处理技术可以灵活应用在很多案例中。与其他框架和引擎的兼容与集成能力使 Hadoop 可以成为使用不同技术的多种工作负载处理平台的底层基础。不过由于这种处理模式需要依赖持久存储,计算任务需要在集群的节点上执行多次读写,因此在速度上会稍显劣势,但是其吞吐量也同样是其他框架所不能匹敌的,这也是批处理模式的特点。

source:大数据技术简介

流式计算

Google Dataflow 模型旨在提供一种统一批处理和流处理的系统,是现代流式计算的基石。其内部使用 Flume 和 MillWheel 来作为底层实现,这里的 Flume 不是 Apache Flume,而是 MapReduce 的编排工具,也有人称之为 FlumeJava;MillWheel 是 Google 内部的流式系统,可以提供强大的无序数据计算能力。

Dataflow 模型的核心点在于:对于无序的流式数据提供基于 event-time 的顺序处理、基于数据本身的特征进行窗口聚合处理的能力,以及平衡正确性、延迟、成本之间的相互关系。

Flink是什么

Flink是一个流式数据的流执行引擎,提供支持流处理批处理两种类型应用(流批!),其针对数据流的分布式计算提供了数据分布,数据通信,容错机制等功能。基于流执行引擎,Flink提供了跟多高抽象层API便于用户编写分布式任务。数据可以作为无界或有界流进行处理。

2022-07-25T14:57:14.png

  • 无界流有头尾未定义,不会终止,数据一经生成即可提供,一定是持续不断地处理,事件引入后必须立即处理。不可能等待所有输入数据到达,因为输入是无界的并且不会在任何时间点完成。
  • 有界流定义有头和尾,在处理计算之前,需要引入所有的数据,批处理。

Apache Flink 擅长处理无界和有界数据集。对时间和状态的精确控制使 Flink 的运行时能够在无限流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生出色的性能。

流批一体的 Apache Flink 架构

2022-07-25T15:28:33.png

  • JobClient:负责接收程序,解析和优化程序的执行计划,然后提交执行计划到JobManager
  • JobManager:负责申请资源,协调以及控制整个job的执行过程(任务调度,处理checkpoint,容错...)
  • TaskManger:TaskManager是运行在不同节点上的JVM进程,负责接收并执行JobManger发送的task,并与JobManger通信,反馈任务状态信息,如果说JobManager是master的话,那么TaskManager就是worker用于执行任务。每个TaskManager像是一个容器,包含一个或者多个Slot。
  • Task:Task是在operators的subtask进行链化之后形成的,具体Flink job中有多少task和operator的并行度和链化的策略有关
  • Slot:Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。所有Slot平均分配TaskManager的内存,值得注意的是,Slot仅划分内存,不涉及CPU的划分,即CPU是共享使用。每个Slot可以运行多个task。Slot的个数就代表了一个程序的最高并行度。

source:大数据Hadoop之——实时计算流计算引擎Flink(Flink环境部署)

Apache Flink 的 OLAP 场景面临的问题及优化思路

OLAP 业务场景

OLAP(On-Line Analytical Processing),在线分析处理,是数据仓库系统最主要的应用,专门用于支持复杂的分析操作,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理。

OLAP 按数据存储格式可分类为:ROLAP、MOLAP、HOLAP

  • ROLAP(Relational OLAP)基于关系数据库的 OLAP 实现关系型数据库关系型数据库
  • MOLAP(Multidimensional OLAP)基于多维数据组织的 OLAP 实现多维数据库数据立方体-
  • HOLAP(Hybrid OLAP)基于混合数据组织的 OLAP 实现关系型数据库数据立方体
名称场景干什么代表
离线批处理用于复杂的 ETL、数据挖掘等延时要求不高的场景。处理的数据规模大、灵活性高,但查询延时差。Hive,Spark
MPP 大规模并行处理(Massively Parallel Processor)有很好的数据规模和灵活性支持,但是对响应时间是没有保证的。当数据量(达 PB 以上)和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。MPP 架构是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。Greenplum,Presto,Impala,ClickHouse
预计算架构侧重数据规模、查询延时,灵活性差。在入库时对数据进行预聚合,通过 keyvalue 存储结果集。进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。Druid,Kylin
搜索引擎架构侧重数据规模和灵活性,查询延迟较差,特别是涉及 join 操作基本思路是在入库时创建索引,基于各自的存储模型进行优化,查询时做并行计算。Elasticsearch

Flink Session Cluster 集群

属于Flink on Yarn模式,依靠YARN来调度flink任务,好处是可以充分利用集群资源,提高集群机器的利用率,基于Hadoop集群,就可以执行MapReduce,Spark和Flink任务,操作方便,运维轻松。

在 YARN 中提前初始化一个 Flink 集群(称为 Flinkyarn-session),开辟指定的资源,以后的 Flink 任务都提交到这里。这个 Flink 集群会常驻在 YARN 集群中,除非手工停止。这种方式创建的 Flink 集群会独占资源,不管有没有 Flink 任务在执行,YARN 上面的其他任务都无法使用这些资源。

2022-07-25T15:55:47.png

有空动手搭一下