【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)

news2024/9/24 9:20:47

手把手+零基础带你玩转大数据流式处理引擎Flink(运行机制+原理加深)

  • 前提介绍
  • 运行Flink应用
    • 运行机制
      • Flink的两大核心组件
        • JobManager
        • TaskManager
          • TaskSlot
      • Flink分层架构
        • Stateful Stream Processing
        • DataStream和DataSet
          • DataStream(数据流)
            • 特点
          • DataSet(数据集):
            • 特点
        • Table SQL
      • DataStream API 编程模型
        • 批处理
        • 流处理
        • 流式处理系统
          • 流处理系统的特点
          • DAG图
          • 物理模型并行计算

前提介绍

关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。

为确保大家能够更直观地掌握Flink服务的搭建与部署技巧,我们将专注于制作高质量的教学视频。后续,我们还会编写一篇与视频内容相辅相成的辅助教材,以帮助大家更好地理解和巩固所学知识。目前,我们的首要任务是录制部署视频,敬请期待!

运行Flink应用

在运行Flink应用之前,深入了解其运行时组件是必不可少的环节,因为这些组件的配置直接关系到应用的性能和稳定性。

运行机制

在Flink的分布式计算框架中,Task是其资源调度的最小单位。正确理解和配置这些组件,对于确保Flink应用的稳定运行和高效性能至关重要。如下图所示:
在这里插入图片描述
上图所展示的是一个使用DataStream API编写的数据处理程序。在图中,我们可以清晰地看到,那些无法被串联在一起的Operator被分隔到了不同的Task中。

Flink的两大核心组件

Flink作为流处理领域的佼佼者,其高效稳定的运行离不开两大核心组件的密切协作:JobManager和TaskManager。它们各司其职,共同支撑着整个Flink运作体系的顺畅运行,如下图所示:
在这里插入图片描述

JobManager

JobManager(也被称作JobMaster)是Flink作业执行的“大脑”,负责协调Task的分布式执行。具体来说,它会负责调度Task,确保它们在集群中的各个节点上按计划执行。

负责协调创建Checkpoint,这是Flink的容错机制之一,用于在作业发生故障时能够恢复到之前的状态。当Job发生failover时,JobManager会协调各个Task从最近的Checkpoint恢复,确保作业的持续执行。

TaskManager

TaskManager(也被称作Worker)则是Flink作业执行的“手脚”,负责具体执行Dataflow中的Tasks。它会分配内存Buffer,确保数据在各个Task之间高效传递。

执行Data Stream的处理逻辑,包括数据的接收、处理和发送等。通过多个TaskManager的并行执行,Flink能够实现大规模数据的实时处理和分析。

下面时JobManager和TaskManager连个核心组件的整体合作处理的架构图:
在这里插入图片描述

TaskSlot

从下面的图中可以看出来Task Slot是TaskManager中的最小资源分配单位,它决定了TaskManager能够支持的并发Task处理数量。
在这里插入图片描述
一个TaskManager中的Task Slot数量直接影响到其并发处理能力和资源利用率。通过合理配置Task Slot的数量,可以根据实际需求调整TaskManager的工作负载,从而实现更高效的任务处理和资源利用。

Flink分层架构

在这里插入图片描述

Stateful Stream Processing

Flink的分层架构分析,位于架构的最底层核心部分,ProcessFunction扮演着实现Flink Core API基础逻辑的关键角色。它提供了直接操作和处理流数据流的底层接口,使得开发者能够基于此构建出高度定制化的组件或功能模块,例如通过巧妙利用其内置的定时机制进行特定条件下的数据匹配与缓存。

尽管ProcessFunction带来了无可比拟的灵活性,允许对数据流处理过程进行细粒度控制,但同时也意味着开发工作相对复杂,需要对Flink的工作原理和并行计算有深入理解才能更好地驾驭这一强大工具。

DataStream和DataSet

DataStream 和 DataSet 是两个核心概念。它们是 Flink 中用于处理数据的两种不同的抽象。
在这里插入图片描述

  • DataStream:适用于处理连续的实时数据流,提供了丰富的流处理操作符和函数,可以实现实时流处理的需求;
  • DataSet:适用于处理有限的离线数据集,提供了丰富的批处理操作符和函数,可以实现离线数据处理的需求。
DataStream(数据流)

DataStream 是 Flink 中处理连续流数据的抽象。它表示无限的数据流,可以是来自消息队列、日志文件、传感器等源的实时数据。

特点
  • 有序的、可变长度的数据记录序列,每个记录都包含一个或多个字段。每个记录都有一个时间戳,用于指示记录的时间顺序。
  • 丰富的操作符和函数,可以对数据流进行转换、过滤、聚合等操作。可以通过窗口操作来处理有限大小的数据窗口,也可以进行流处理的时间语义控制。
  • 基于事件时间(Event Time)或处理时间(Processing Time)进行处理的,可以实现事件驱动的流处理。
DataSet(数据集):

DataSet 是 Flink 中处理有限数据集的抽象。它表示有限的、静态的数据集合,可以是来自文件、数据库、批处理作业等离线数据。

特点
  • 不可变的、有限长度的数据集合,每个数据集合由一组记录组成,每个记录都包含一个或多个字段。
  • 丰富的操作符和函数,可以对数据集进行转换、过滤、聚合等操作。可以通过分组、排序、连接等操作来处理数据集。
  • 基于批处理模式进行处理的,适用于离线数据处理和批处理作业。
Table SQL
  • SQL 是基于 Table 的,因此在使用 SQL 之前需要创建一个 Table 环境。
  • 不同类型的 Table 需要使用相应的 Table 环境进行构建。
  • Table 可以与 DataStream 或 DataSet 相互转换,这使得我们可以在流处理和批处理之间无缝切换。
  • Streaming SQL 与存储的 SQL 有所不同,它会被转化为流式执行计划,以实现实时流处理的需求。

后面的章节会针对性详细介绍,此处大概了解就可以了。

DataStream API 编程模型

流处理和批处理是大数据处理中的两个核心概念,它们从不同的角度对数据进行处理。它们的关系可以类比于 Java 中的 ArrayList 中的元素,可以通过下标直接访问,也可以通过迭代器进行访问。

批处理

批处理是对有限的静态数据集进行处理的方式。它以批量的方式处理数据,数据是一次性加载并进行处理。批处理适用于离线数据处理和批量作业,如数据清洗、数据分析等。在批处理中,数据被视为有限的数据集合,可以通过分组、排序、连接等操作进行处理。

流处理

流处理是对连续的实时数据流进行处理的方式。它以事件驱动的方式处理数据,数据是逐个到达的,并且可以立即进行处理。流处理适用于实时性要求较高的场景,如实时监控、实时分析等。在流处理中,数据被视为无限的流,可以通过窗口操作来处理有限大小的数据窗口。

流式处理系统

流处理系统具有许多独特的特点。通常情况下,由于需要处理无限数据集,流处理系统采用一种数据驱动的处理方式。它会预先设置一些算子,并在数据到达时对数据进行处理。

在这里插入图片描述

流处理系统的特点
  1. 实时处理:流处理系统能够实时处理连续的数据流,数据到达后立即进行处理,实现实时性要求较高的应用场景。
  2. 无限数据集:流处理系统能够处理无限的数据流,不受数据大小的限制。它能够处理持续不断产生的数据,而不需要等待所有数据都可用。
  3. 数据驱动:流处理系统是以数据为驱动的,即数据到达时才进行处理。系统会根据数据的到达情况来触发相应的处理操作,而不是按照固定的时间间隔进行处理。
DAG图

为了表达复杂的计算逻辑,包括 Flink 在内的分布式流处理引擎一般采用DAG图来表示整个计算逻辑,其中 DAG 图中的每一个点就代表一个基本的逻辑单元,也就是算子。

由于计算逻辑被组织成有向图,数据会按照边的方向,从一些特殊的 Source 节点流入系统,然后通过网络传输、本地传输等不同的数据传输方式在算子之间进行发送和处理,最后会通过另外一些特殊的 Sink 节点将计算结果发送到某个外部系统或数据库中,下面是执行计划的DAG逻辑图
在这里插入图片描述

物理模型并行计算

在物理模型中,我们根据计算逻辑的需求,通过系统自动优化或人为指定的方式将计算工作分布到不同的实例中。只有当算子实例分布到不同的进程上时,才需要通过网络进行数据传输。而在同一进程中的多个实例之间的数据传输通常是不需要通过网络的。

通过将计算工作分布到不同的实例中,可以实现并行计算和分布式处理,以提高整体的计算性能和吞吐量。在分布式流处理引擎中,系统会根据算子的并行度和资源配置,将算子实例分布到不同的计算节点上,使得每个实例可以独立地处理数据。

对于实际的分布式流处理引擎,它们的实际运行时物理模型要更复杂一些,这是由于每个算子都可能有多个实例。如下图所示:
在这里插入图片描述
在实际的分布式流处理引擎中,物理模型比逻辑模型更加复杂。这种复杂性是由于分布式流处理引擎的并行性和分布式计算的特性所导致的。为了实现高吞吐量和低延迟的数据处理,引擎会将算子实例分布在多个计算节点上,并通过网络进行数据交换和通信。

例如,图中的算子 A 作为数据源有两个实例,而中间算子 C 也有两个实例。在逻辑模型中,A 和 B 是 C 的上游节点,但在物理模型中,C 的每个实例与 A 和 B 的每个实例之间都可能存在数据交换。

当算子实例分布到不同的进程上时,数据传输就会发生。这时,需要通过网络进行数据的传输和交换。而在同一进程中的多个实例之间,数据传输通常是通过共享内存或进程间通信的方式进行,而不需要通过网络。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1430511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顺序表:数据结构的建筑积木

朋友们大家好啊,本节内容我们进入数据结构的第二节,顺序表有关内容,同步我们会学习计组原理与cpp相关知识,求三连啊! 本节我们重点探讨动态顺序表关于插入数据和删除数据的多种情况的分析 顺序表 线性表顺序表静态顺序…

浪漫的通讯录(顺序表篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能…

[python] os.fork

文章目录 使用 os.fork()注意事项示例安全使用 os.fork()底层原理 os.fork() 是 Python 中用于 Unix/Linux 系统的一个函数,它在当前进程中创建一个子进程。这个函数是 os 模块的一部分,直接调用了 Unix/Linux 系统的 fork 系统调用。fork 系统调用非常基…

Wiringpi不支持树莓派5了, Wiringpi官方好像不更新了

买了树莓派5才知道,Wiringpi不支持树莓派5了, Wiringpi官方好像不更新了。那用什么来替代呢? 通过资料查询,libgpiod 支持io控制; https://github.com/brgl/libgpiod //gpio库 gpiodetect #检测支持的io 可以看到&a…

SpringBoot注解--05--注解@Valid

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 前言1.1 Bean Validation1.2 Valid实际案例1.3 Spring 中的 valid 注解 2 Valid 详解2.1 源码解析2.2 参数校验使用注解2.3 具体使用流程POST 则可以以实体对象为…

再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式

总结经验 redis主从:可实现高并发(读),典型部署方案:一主二从 redis哨兵:可实现高可用,典型部署方案:一主二从三哨兵 redis集群:可同时支持高可用(读与写)、高并发,典型部署方案:三主三从 一、概述 Redis 支持三种集群模式,分别为主从模式、哨兵模式和Cluster模式。…

Java并发基础:CountDownLatch全面解析!

内容概要 CountDownLatch的优点在于能够简洁高效地协调多个线程的执行顺序,确保一组线程都完成后才触发其他线程的执行,适用于资源加载、任务初始化等场景。它提供了清晰的等待/通知机制,易于理解和使用,是提升多线程程序性能和可…

ChatGPT prompt概述

ChatGPT prompt概述 2022年11月30日,由人工智能实验室Open AI发布的对话式大型语言模型ChatGPT一夜爆火。凭借其强大的文字处理和人机交互能力迅速成为炙手可热的新一代人工智能产品。ChatGPT号称史上最强大的人工智能,它通过学习和理解人类语言与我们对…

玩具取名

看到长度是\(200\),想到区间DP 但在这里说一下,设\(f[i][j]\)表示前\(i\)个字符,转换后以\(j\)结尾的最短长度是推不走的,因为原来的字符串的第\(i\)个字符合并之后产生的新字符有可能继续合并,这是有问题的

【成品论文57页】2024美赛F题成品论文57页+每一小问配套代码数据

基于数据预测下的减少非法野生动物贸易研究 近年来,非法野生动物贸易每年涉及的金额高达 265 亿美元,被认为是全球第四大 非法贸易。本文基于收集的数据, 对非法野生动物贸易进行研究。 问题一,为了确定五年项目的研究对象我们利用…

PXIe-5842第三代PXI矢量信号收发器简介

内容 简介​PXIe-5842 VST的主要特性PXI VST软件工具PXI VST应用结论下一步 简介 NI于2012年引入了矢量信号收发器(VST)的概念。VST将RF信号发生器、RF信号分析仪和功能强大的FPGA集成在单个PXI模块上。PXIe-5842 VST是首款提供30 MHz到26.5 GHz连续频率覆盖范围的VST。PXIe…

百分点科技:《数据科学技术: 文本分析和知识图谱》

科技进步带来的便利已经渗透到工作生活的方方面面,ChatGPT的出现更是掀起了新一波的智能化浪潮,推动更多智能应用的涌现。这背后离不开一个朴素的逻辑,即对数据的收集、治理、建模、分析和应用,这便是数据科学所重点研究的对象——…

Blender 与 3ds Max | 面对面的直接较量(2024)

Blender和3ds Max,哪个动画软件更好?作为一个从事动画领域十年的专业人士,Mark McPherson提供了八条最新建议,帮助你了解哪个软件更适合满足你的3D动画需求。 1.建模 获胜者:3ds Max。3ds Max的建模机制已经被证明是…

Leetcode刷题笔记题解(C++):36. 有效的数独

思路一:暴力破解,两个二维数组记录行、列对应的数字出现的次数,比如rows[i][index]表示的数字index在i行出现的次数,三维数组记录每个块中对应数字出现的次数,比如boxes[i/3][j/3][index]表示的数字index在[i/3][j/3]个…

031 递归

何为递归 示例 public static void main(String[] args) {System.out.println(fn(5)); }static int fn(int a){return a 1 ? 1 : a * fn(a - 1); }

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda(2023.9)详解(不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等)连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全(create/in…

基于大数据的淘宝电子产品数据分析的设计与实现

(1)本次针对开发设计系统并设置了相关的实施方案,利用完整的软件开发流程进行分析,完成了设置不同用户的操作权限和相关功能模块的开发,最后对系统进行测试。 (2)框架可以帮助程序开发者快速构建…

【Java程序设计】【C00195】基于SSM的影视创作论坛管理系统(论文+PPT)

基于SSM的影视创作论坛管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的影视创作论坛 本系统分为前台系统、后台管理员和后台会员3个功能模块。 前台系统:当游客打开系统的网址后,首先看…

2024美赛B题Searching for Submersibles原创论文完整版

Searching for Submersibles搜索潜水器 2024美赛B题Searching for Submersibles原创论文(共38页)部分内容,其余见文末: 整体框架: 1.1 问题背景与问题重述 海上游轮迷你潜水艇公司(MCMS)&…

前端学习笔记 | HTML5+CSS3静态网页制作的技巧(持续更新)

注:本文的css样式均使用less写法 1、字体居中 (1)先text-align:center;行内元素水平居中 (2)再line-heigh:(盒子高度);行内元素垂直居中 text-align: center;line-height: ( 30 / vw ); 2、盒子居中 情景1&#…