Flink原理简介和使用(2)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink原理简介和使用(2)

image.png


  • 所有的Flink由三部分组成 Source、Transformation、Sink


Source负责读取数据源
Transformation利用各种算子进行处理加工
Sink负责输出
在运行时 Flink上运行的程序会被映射成 "逻辑数据流" dataflows 它包含了这三部分
每一个dataflow以一个或多个sources开始
以一个或多个sinks结束


  • dataflow类似于任意的有向无环图(DAG)


在大部分情况下 程序的转换算法(transformations)跟dataflow中的算子(operator)是一一对应关系
但有时候一个transformations可能对应多个operator


image.png


执行图(ExecutionGraph)


由Flink程序直接映射成数据流图 StreamGraph 也被成为逻辑流图 因为它们表示的是计算逻辑的高级视图 
为了执行一个流处理程序 Flink需要将逻辑流图转换为物理数据流图(也叫执行图)详细说明程序的执行方式


  • Flink执行图可以分为四层


StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图


  • StreamGraph



是根据用户通过Stream API编写的代码生成的最初的图 用来表示程序的拓扑结构


  • JobGraph


StreamGraph经过优化后生成了JobGraph 提交给JobManager的数据结构
主要优化为:
将多个符合条件的节点 chain在一起作为一个节点  这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗


  • ExecutionGraph


JobManager根据JobGraph生成了ExecutionGraph
ExecutionGraph是JobGraph的并行化版本 是调度层最核心的数据结构


  • 物理执行图


JobManager根据ExecutionGraph对Job进行调度后
在各个TaskManager上部署Task后形成的“图”
并不是一个具体的数据结构



image.png


并行度(Parallelism)


Flink程序的执行具有并行、分布式特性 
一个流包含了一个或多个分区(stream partition)
而每一个算子(operator)可以包含一个或多个子任务(operator subtask)
这些子任务在不同的线程、不同物理机或不同的容器中不依赖的执行


  • 并行数据流


image.png


一个特定算子的子任务(subtask)的个数被称为并行度
一般情况下 一个流程序的并行度 可以认为其所有算子中最大的并行度


image.png


一个程序中 不同的算子可能具有不同的并行度
Stream在算子之间传输数据的形式可以是 one-to-one(forwarding)的模式也可以是redistributing的模式 具体是哪一种形式 取决于算子的种类
one-to-one:
stream(比如在source和map operator之间) 维护着分区以及元素的顺序 那意味着map算子的子任务看到的元素的个数以及顺序跟source算子的子任务生产的元素的个数、顺序相同 map、filter、flatMap等算子都是one-to-one的对应关系
Redistributing:
stream(map()跟keyBy/window之间或者keyBy/window跟slink之间)的分区会发生改变
每一个算子的子任务依据所选择的transformation发送数据到不同的目标任务
例如:
keyBy()基于hashCode重分区 
broadcast和rebalance会随机重新分区
这些算子都会引起redistribute过程
该过程就类似于spark中的shuffle
类似于spark的窄依赖、宽依赖


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
4天前
|
Java 流计算
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
88 3
|
4天前
|
消息中间件 缓存 监控
Flink背压原理以及解决优化
Flink背压原理以及解决优化
158 0
|
2天前
|
SQL Prometheus Kubernetes
实时计算 Flink版产品使用合集之时间戳读取的原理是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
9 0
|
4天前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
4天前
|
运维 监控 Java
面经:Storm实时计算框架原理与应用场景
【4月更文挑战第11天】本文是关于Apache Storm实时流处理框架的面试攻略和核心原理解析。文章分享了面试常见主题,包括Storm的架构与核心概念(如Spout、Bolt、Topology、Tuple和Ack机制),编程模型与API,部署与运维,以及应用场景与最佳实践。通过代码示例展示了如何构建一个简单的WordCountTopology,强调理解和运用Storm的关键知识点对于面试和实际工作的重要性。
40 4
面经:Storm实时计算框架原理与应用场景
|
4天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
92 0
|
4天前
|
SQL 缓存 分布式计算
flink1.18 SqlGateway 的使用和原理分析
# 了解flink1.18 sqlGateway 的安装和使用步骤 # 启动sqlgateway 流程,了解核心的结构 # sql提交流程,了解sql 的流转逻辑 # select 查询的ResultSet的对接流程,了解数据的返回和获取逻辑
|
4天前
|
分布式计算 API 数据处理
Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
【2月更文挑战第15天】Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
73 1
|
4天前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
500 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
|
4天前
|
存储 NoSQL MongoDB
阿里云 Flink 原理分析与应用:深入探索 MongoDB Schema Inference
本文整理自阿里云 Flink 团队归源老师关于阿里云 Flink 原理分析与应用:深入探索 MongoDB Schema Inference 的研究。
46955 2
阿里云 Flink 原理分析与应用:深入探索 MongoDB Schema Inference
http://www.vxiaotou.com