Flink系列之Flink流式计算引擎基础理论

163 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

Flink流式计算引擎基础理论

一、Flink流式计算引擎基础理论

1.1 官网解读

官网解释: flink.apache.org/

Apache Flink® — Stateful Computations over Data Streams

flink-home-graphic.png

看详细介绍:
优势细节官网链接
所有流式场景1、数据驱动的应用 2、批流数据分析 3、数据通道和ETLflink.apache.org/zh/usecases…
正确性保证1、Exactly-once状态一致性保证 2、事件时间处理 3、复杂的late date处理flink.apache.org/zh/flink-ap…
分层 APISQL on Stream & Batch Data DataStream API & DataSet API ProcessFunction (Time & State)flink.apache.org/zh/flink-ap…
聚焦运维灵活部署 高可用 保存点flink.apache.org/zh/flink-op…
大规模计算水平扩展架构 支持超大状态 增量检查点机制flink.apache.org/zh/flink-ar…
性能卓越低延迟 高吞吐 内存计算flink.apache.org/zh/flink-ar…

英文版本:

image-20220216160830475.png

中文版本:

image-20220216160745806.png

Flink 各种特性介绍:flink.apache.org/ What is Apache Flink?:flink.apache.org/flink-archi… Flink 应用场景:flink.apache.org/usecases.ht… Flink 应用企业:flink.apache.org/poweredby.h… Flink 版本升级迭代:flink.apache.org/downloads.h… Flink Quick Start:nightlies.apache.org/flink/flink… Flink 架构:nightlies.apache.org/flink/flink… Flink 核心概念:nightlies.apache.org/flink/flink… Flink 流式应用程序开发相关:nightlies.apache.org/flink/flink… Flink Checkpoint:nightlies.apache.org/flink/flink… Flink State 和 StateBackend:nightlies.apache.org/flink/flink… Flink 部署:nightlies.apache.org/flink/flink…

要点01:Flink 处理无界数据流:nightlies.apache.org/flink/flink… 要点02:Flink 关于并行数据流的处理方案:nightlies.apache.org/flink/flink… 要点03:Flink 的有状态计算和状态管理:nightlies.apache.org/flink/flink… 要点04:Flink Operator 和 Task:nightlies.apache.org/flink/flink… 要点05:Flink 资源管理 和 Solot:nightlies.apache.org/flink/flink… 要点06:Flink 应用程序运行模式:nightlies.apache.org/flink/flink…

Flink 设计目的和初衷:

无界数据流:无界数据流有一个开始但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性,无界流的处理称为流处理。

无界流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处理无边界流,即,事件在被摄入后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,并且不会在任何时间点完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断出结果的完整性。

一种不断增长的,本质上无限的数据集。这些通常被称为“流数据”。然而,当应用于数据集时,术语流或批量是有问题的,这种数据往往意味着使用某种类型的执行引擎来处理这些数据集。两种类型的数据集之间的关键区别在于现实中它们的有限性,因此最好用表示这种区别的术语来表述它们。因此,我将无限的“流”数据集称为无限数据,有限的“批处理”数据集作为有限数据。

有界数据流和无界数据流的区别:

bounded-unbounded.png 一种持续的数据处理模式,适用于无限数据流。低延迟,近似和/或推测结果通常与流式引擎联系在一起。事实上,批处理系统传统上没有实现低延迟或推测性的结果。

从这里开始,任何时候使用术语“流”,意思都是设计用于无限数据集的执行引擎。当没有附加任何其他术语时,将明确表示无限数据,无限数据处理或低延迟/近似/推测结果。这些是在Google Dataflow中采用的术语。

最终总结:

离线和实时应该指的是:数据处理的延迟;
批量和流式指的是:数据处理的方式。

批处理的特点是有界、持久、大量,批处理非常适合需要访问全套记录才能完成的计算工作,一般用于离线统计。

流处理的特点是无界、实时,流处理方式无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。

1.2 Flink 架构设计实现和应用模块分工

Flink 整体架构设计实现:nightlies.apache.org/flink/flink…

架构图:

processes.svg

RestClient(ActorSystem RPC 通信 HTTP 的提交 App) +

StreamGraph(一个算子/一个Operator 就是这个 DataFlow 中的一个顶点 流图 原始图) +

JobGraph (提交到服务集群中的数据结构抽象对象,在 StreamGraph 基础之上做了优化:把满足一定条件的相邻 Operator 合并成一个 OperatorChain)

JobManager( ResourceManager 管理和调度资源 + WebMonitorEndpoint 接收 客户端 rest 请求 + Dispatcher 做任务分发 )

  • JobGraph(当 Dispatcher 去给这个Job 启动一个 JobMaster 的时候,会让 JobMaster(类似于 YARN 中的 AM 角色) 把这个 JobGraph 转换成 ExecutionGraph
  • ExecutionGraph: 并行化(Operator 根据并行度运行成多个 Task)) + ExecutionGraph

TaskManager: Memory、NetWork 、IO Manager ActorSystem, TaskSlotTable

关于 ResourceManager 的解释:

1、YARN 中的 主节点

2、Flink 的 JobManager / Standalone 集群的主节点 的一个内部组件: 资源管理

主节点:逻辑概念: JobManager
Standalone: 主节点:物理概念: StandaloneSessionClusterEntrypoint
YARN Session Cluster: 主节点: YARNSessionClusterEntrypoint

Flink API 设计:nightlies.apache.org/flink/flink…

levels_of_abstraction.svg

Flink 整体架构体系:API 和 Libaries 体系

Flink 整体的架构体系.png

阿里的 Flink 流式平台负责人: 阿里云栖大会的时候,在 Flink-1.13 的完全支持 流批一体的 API

批处理:Spark
流处理:Flink

很多公司,自己实现!搞一个平台,封装这两个东西

Spark =》 SparkSession :SparkContext + SQLContext + HiveContext



声明:
        文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。

        落叶飘雪