这是我参与「第四届青训营 」笔记创作活动的第1天,笔记内容围绕「流/批/OLAP 一体的 Flink 引擎介绍」课程展开,分以下三部分记录:01. Flink概述, 02.Flink 整体架构,03.Flink架构优化。
1.Flink概述
1.1Flink起源
Flink 起源于一个叫作 Stratosphere 的项目,它是由 3 所地处柏林的大学和欧洲其他一些大学在 2010~2014 年共同进行的研究项目,由柏林理工大学的教授沃克尔·马尔科(Volker Markl)领衔开发。2014 年 4 月,Stratosphere 的代码被复制并捐赠给了 Apache 软件基金会,Flink 就是在此基础上被重新设计出来的。Flink 是一个大数据流处理引擎,它可以为不同的行业提供大数据实时处理的解决方案。
1.2Flink诞生背景
1.2.1.大数据
大数据(Big Data):指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
1.2.2.大数据计算架构发展历史
1.2.3.为什么需要流式计算?
大数据的实时性带来价值更大,比如:
1.监控场景:如果能实时发现业务系统的健康状态,就能提前避免业务故障;
2.金融风控:如果实时监测出异常交易的行为,就能及时阻断风险的发生;
3.实时推荐:比如在抖音,如果可以根据用户的行为数据发掘用户的兴趣、偏好,就能向用户推荐更感兴趣的内容;
4....
1.2Flink为什么脱颖而出?
1.2.1流式框架对比:
1.2.2Flink 的核心特性
Flink 区别与传统数据处理框架的特性如下。
①高吞吐和低延迟。每秒处理数百万个事件,毫秒级延迟。
②结果的准确性。Flink 提供了事件时间(event-time)和处理时间(processing-time)语义。对于乱序事件流,事件时间语义仍然能提供一致且准确的结果。
③精确一次(exactly-once)的状态一致性保证。
④可以连接到最常用的存储系统,如 Apache Kafka、Apache Cassandra、Elasticsearch、JDBC、Kinesis 和(分布式)文件系统,如 HDFS 和 S3。
⑤高可用。本身高可用的设置,加上与 K8s,YARN 和 Mesos 的紧密集成,再加上从故障中快速恢复和动态扩展任务的能力,Flink 能做到以极少的停机时间 7×24 全天候运行。
⑥能够更新应用程序代码并将作业(jobs)迁移到不同的 Flink 集群,而不会丢失应用程序的状态。
2.Flink 整体架构
2.1核心组件
一个Flink集群,主要包含以下两个核心组件:
1.JobManager (JM):负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等;
2.TaskManager (TM):负责执行一个 DataFlowGraph 的各个 task 以及 data streams的 buffer和数据交换。
TaskManager 启动之后,JobManager 会与它建立连接,并将作业图(JobGraph)转换成可执行的“执行图”(ExecutionGraph)分发给可用的 TaskManager,然后就由 TaskManager 具体执行任务。
2.2.Flink如何做到流批一体
站在Flink的角度,Everything is Streams,无边界数据集是一种数据流,一个无边界的数据流可以按时间切段成一个个有边界的数据集,所以有界数据集(批式数据)也是一种数据流.
因此,不管是有边界的数据集(批式数据)还是无边界数据集,Flink都可以天然地支持,这是Flink支持流批一体的基础。并且Flink在流批一体上,从上面的API到底层的处理机制都是统一的,是真正意义上的流批一体。
3.Flink架构优化
3.1.流/批/OLAP业务场景概述
3.1.1三种业务场景的的特点比对如下表:
3.1.2三种业务场景的解决方案的要求及带来的挑战是:
3.2三种业务场景为什么可以用一套引擎来解决
1.批式计算是流式计算的特例,有界数据集(批式数据)也是一种数据流、
一种特殊的数据流;
2. OLAP计算是一种特殊的批式计算,它对并发和实时性要求更高,其他情况与普通批式作业没有特别大区别。