Flink详解系列之二--核心概念

计算引擎:Flink核心概念 Flink 通过其核心概念如 DataStream 和 DataSet API、执行环境、状态管理、时间语义、窗口操作、水印、连接器等,提供了一种强大而灵活的流处理框架。它的丰富功能和可扩展性使其在处理实时数据流和批处理任务方面非常出色。 阅读详情

一、流处理

在自然环境中,数据的产生原本就是流式的。无论是来自 Web 服务器的事件数据,证券交易所的交易数据,还是来自工厂车间机器上的传感器数据,其数据都是流式的。但是当你分析数据时,可以围绕 有界流(bounded)或 无界流(unbounded)两种模型来组织处理数据,当然,选择不同的模型,程序的执行和处理方式也都会不同。

无界数据流

顾名思义,无界数据流就是指有始无终的数据,数据一旦开始生成就会持续不断的产生新的数据,即数据没有时间边界。无界数据流需要持续不断地处理。

有界数据流

相对而言,有界数据流就是指输入的数据有始有终。例如数据可能是一分钟或者一天的交易数据等等。处理这种有界数据流的方式也被称之为批处理。

二、Flink程序三大逻辑结构

  • source:数据源,flink 在流处理和批处理上的 source 大概有 4 类:本地集合、文件、socket,自定义的 source(比如:kafka等)。
  • transformations:各种类型的装换操作(比如:map, flatmap, reduce等)。
  • sink:数据的汇或者是接收器,也有4中类型:文件、socket、打印出来、自定义sink(比如:kafka等)

通常,程序代码中的 transformation 和 dataflow 中的算子(operator)之间是一一对应的。但有时也会出现一个 transformation 包含多个算子的情况,如上图所示。

并行 Dataflows

Flink 程序本质上是分布式并行程序。在程序执行期间,一个流有一个或多个流分区(Stream Partition),每个算子有一个或多个算子子任务(Operator Subtask)。每个子任务彼此独立,并在不同的线程中运行,或在不同的计算机或容器中运行。

算子子任务数就是其对应算子的并行度。在同一程序中,不同算子也可能具有不同的并行度。

Flink 算子之间可以通过一对一(直传)模式或重新分发模式传输数据:

一对一(One-to-one)模式(例如上图中的 Source 和 map() 算子之间)可以保留元素的分区和顺序信息。这意味着 map() 算子的 subtask[1] 输入的数据以及其顺序与 Source 算子的 subtask[1] 输出的数据和顺序完全相同,即同一分区的数据只会进入到下游算子的同一分区。

重新分发(Redistribution)模式(例如上图中的 map() 和 keyBy/window 之间,以及 keyBy/window 和 Sink 之间)则会更改数据所在的流分区。当你在程序中选择使用不同的 transformation,每个算子子任务也会根据不同的 transformation 将数据发送到不同的目标子任务。例如以下这几种 transformation 和其对应分发数据的模式:keyBy()(通过散列键重新分区)、broadcast()(广播)或 rebalance()(随机重新分发)。在重新分发数据的过程中,元素只有在每对输出和输入子任务之间才能保留其之间的顺序信息(例如,keyBy/window 的 subtask[2] 接收到的 map() 的 subtask[1] 中的元素都是有序的)。因此,上图所示的 keyBy/window 和 Sink 算子之间数据的重新分发时,不同键(key)的聚合结果到达 Sink 的顺序是不确定的。

三、窗口

窗口是无限流处理中的一个概念,它将流拆分成一个个的“桶”,我们再基于这些桶的数据做计算。

流处理中的聚合操作(counts,sums等等)不同于批处理,因为数据流是无限,无法在其上应用聚合,所以通过限定窗口(window)的范围,来进行流的聚合操作。例如:5分钟的数据计数,或者计算100个元素的总和等等。

窗口可以由时间驱动 (every 30 seconds) 或者数据驱动(every 100 elements)。如:滚动窗口tumbling windows(无叠加),滑动窗口sliding windows(有叠加),以及会话窗口session windows(被无事件活动的间隔隔开)

四、检查点

基于检查点的容错是Flink的关键特征之一,正式基于这样的设计,Flink才可以统一批流处理。Flink 容错机制的核心就是持续创建分布式数据流及其状态的一致快照。这些快照在系统遇到故障时,充当可以回退的一致性检查点(checkpoint)

分布式快照引入了数据栅栏(barrier)的概念,barrier 被插入到数据流中,作为数据流的一部分和数据一起向下流动。Barrier 不会干扰正常数据,数据流严格有序。一个 barrier 把数据流分割成两部分:一部分进入到当前快照,另一部分进入下一个快照。每一个 barrier 都带有快照 ID,并且 barrier 之前的数据都进入了此快照。Barrier 不会干扰数据流处理,所以非常轻量。多个不同快照的多个 barrier 会在流中同时出现,即多个快照可能同时创建。

Barrier 在数据源端插入,当 snapshot n 的 barrier 插入后,系统会记录当前 snapshot 位置值 n (用Sn表示)。例如,在 Apache Kafka 中,这个变量表示某个分区中最后一条数据的偏移量。这个位置值 Sn 会被发送到一个称为 checkpoint coordinator 的模块。

然后 barrier 继续往下流动,当一个 operator 从其输入流接收到所有标识 snapshot n 的 barrier 时,它会向其所有输出流插入一个标识 snapshot n 的 barrier。当 sink operator (DAG 流的终点)从其输入流接收到所有 barrier n 时,它向 the checkpoint coordinator 确认 snapshot n 已完成。当所有 sink 都确认了这个快照,快照就被标识为完成。

接收超过一个输入流的 operator 需要基于 barrier 对齐(align)输入。参见上图:

  • operator 只要一接收到某个输入流的 barrier n,它就不能继续处理此数据流后续的数据,直到 operator 接收到其余流的 barrier n。否则会将属于 snapshot n 的数据和 snapshot n+1的搞混
  • barrier n 所属的数据流先不处理,从这些数据流中接收到的数据被放入接收缓存里(input buffer)
  • 当从最后一个流中提取到 barrier n 时,operator 会发射出所有等待向后发送的数据,然后发射snapshot n 所属的 barrier
    *经过以上步骤,operator 恢复所有输入流数据的处理,优先处理输入缓存中的数据

五、状态

只有在每一个单独的事件上进行转换操作的应用才不需要状态,换言之,每一个具有一定复杂度的流处理应用都是有状态的。任何运行基本业务逻辑的流处理应用都需要在一定时间内存储所接收的事件或中间结果,以供后续的某个时间点(例如收到下一个事件或者经过一段特定时间)进行访问并进行后续处理。状态有两种形式:

  • 用户自定义状态:由 算子直接创建或者修改的状态。
  • 系统状态:这种状态是指作为算子计算中一部分缓存数据。

Flink的核心概念及运行流程 一、什么是Flink flink是数据流上的有状态计算,可以用来处理有界和无界数据(实时和批次)。 1、应用的场景: • 事件驱动的应用 • 数据管道 & ETL • 流式、批次数据分析 二、概念及运行流程 1、概念 1.1、flink的组件堆栈 Programs and Dataflows 1、DataFlow的基本套路: 构建运行环境-》Source(一个或多个)-》转换(算子) -》Sink(一个或多个) 多个DataFlow组成DAG。 2、并行化DataFlow(Distributed S 阅读详情

相关推荐

【深入浅出flink】第3篇:多图讲解flink核心概念(通俗易懂)Job、Task、SubTask、Slot、Slotsharing、Parallelism、Operator Chains

本文是理解flink整个架构的核心,是最基础也是必须要掌握的知识,只有完全理解了它们,你才会在以后学习flink时游刃有余,才能更好的进阶flink高阶知识。

雷恩Layne 7515

flink是什么?以及批处理和流处理、有界流和无界流的区别?

软件面试常见问题:flink是什么?以及批处理和流处理、有界流和无界流的区别?

m0_53396342的博客 2770

Flink核心概念解析:Window、State、Checkpoint详解

在大数据时代,“实时计算”就像“外卖骑手的定位追踪”一样重要——我们需要快速从海量数据流中提取价值(比如“过去5分钟内某商品的销量”)。Apache Flink作为全球最流行的流处理框架,能高效处理这种“无界数据流”(永远不会结束的数据流,比如物联网传感器数据、电商订单流)。Window:如何将无界数据流切分成“可处理的小块”;State:如何记住“历史数据”以支持复杂计算;Checkpoint:如何在故障时“恢复现场”,保证计算结果不丢失。

AI 领航者的博客 549

大数据之无界数据流和有界数据流

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

wangxiaowu_001的博客 2779

Flink系列:无界和有界数据流定义与区别

有界流 有定义流的开始,也有定义流的结束。 有界流可以在摄取所有数据后再进行计算。 有界流所有数据可以被排序,所以并不需要有序摄取。 有界流处理通常被称为批处理 有界流,Flink则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。 无界流 有定义流的开始,但没有定义流的结束。 它们会无休止地产生数据。 无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。 ...

NIO4444 3955

Flink框架:批处理和流式处理与有界数据和无界数据之间的关系

从数据集的类型来看,数据集可以分为有界数据和无界数据两种,从处理方式来看,有批处理和流处理两种。一般而言有界数据常常使用批处理方式,无界数据往往使用流处理方式。

huanfeng_AI的博客 471

二刷大数据(三)- Flink1.17

通过算子链,多个算子的子任务(Subtask)可以共享同一个 Task Slot,避免了跨进程或跨网络的数据交换,减少了线程上下文切换、数据序列化/反序列化的开销,同时也降低了对系统资源的需求。如果作业的并行度大于可用的任务槽数量,部分子任务将在其他 TaskManager 的任务槽中执行,或者等待空闲的任务槽。综上所述,Flink 中的水位线是事件时间处理框架中不可或缺的一部分,它通过动态跟踪和传播事件时间的进展,解决了实时数据流中的乱序问题,确保了基于事件时间的窗口计算能够在合理的时间内准确完成。

qq_58551342的博客 1939

【大数据Flink系列】Flink 核心概念综述

【大数据Flink系列】Flink 核心概念综述

weixin_54707168的博客 792

Flink 系列第17篇:Flink Table&SQL 核心概念、原理与实战详解

本文介绍了Apache Flink Table/SQL API的核心概念与开发配置。主要内容包括: Flink Table/SQL API提供流批统一的查询能力,底层基于Calcite实现SQL解析优化,包含Table API和SQL API两种接口; 核心特性是流批语义统一,同一查询可适配批数据和流数据,底层自动优化执行策略; 详细解析了Flink 1.17.2版本的运行环境配置,包括核心依赖模块(bridge、planner、common)的功能说明; 提供了Java和Scala开发的Maven依赖配置

juniperhan的博客 689

Z-Image Turbo LoRA训练全流程:从数据标注到模型部署的保姆级指南(附ai-toolkit配置)

本文提供了一份详尽的Z-Image Turbo LoRA模型训练全流程指南,涵盖从数据准备、智能标注、参数调优到最终模型部署与Z-Image集成的每个环节。重点解析了使用ai-toolkit训练整合包进行高效训练的核心技巧与避坑方法,旨在帮助用户稳定训练出高质量的专属角色模型。

weixin_29088655的博客 962

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

基于 Apache Flink 的大规模准实时数据分析平台

本文来自 Flink Forward Asia 2019 Lyft 公司的分享,作者是徐赢和高立,感谢! # 福利 # Flink Forward Asia 2019PPT 下载链接给你们准备好啦!公众号里面回复 ffa 即可下载。 如果觉得文章对你有帮助,请转发朋友圈、点在看,让...

http://www.54tianzhisheng.cn/ 332

linux基线检查、基线加固、安全漏扫、系统漏洞、centos7、文尾部附脚本

等保三级-CentOS Linux 7合规基线检查 风险分类:系统-等保三级-CentOS Linux 7合规基线检查 检测项说明: CentOS Linux 7合规基线检查,对标中国等保2.0第三级等级保护基本要求部分检查项目,仅供参考 检查项目 : 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 加固建议: 1、执行`cat /etc/shadow | awk -F: '($2 == "" ) { print $1}' `, 查看空密码账户并处理; 2、

swindy博客 5622

Flink 系列之四 - 核心概念

本章针对Flink的核心概念做了一次全面的讲解,这一章对理解后面很多内容或者在实践中都非常重要,大家一定要理解好这些概念。接下来就进入Flink具体的相关API详细内容。

代码让AI扣 829

BUUCTF逆向题Youngter-drive

其实线程一代码我自己也不大理解,看了正确的 flag 后,我自己推出来的是这样:在 couece 中取出字符,然后在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中找出一样的,取出该字符在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中的下标,如果取出的字符是大写则 在ASCII中找出【下标 - 38】值对应的字符替换couece中的字符,同理,小写就减 96。

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1090

两万字硬核指南!Python爬虫requests库从入门到精通:新手也能搞定所有爬取场景(附实战案例+避坑大全)

请求头是客户端发送给服务器的额外信息,比如User-Agent(浏览器类型)、Referer(来源页面)、Cookie(登录凭证)、(编码方式)等。Cookie是服务器存储在客户端的小型文本文件,包含用户的登录凭证、偏好设置等信息。浏览器会在每次请求时自动携带Cookie,服务器通过Cookie识别用户身份。代理IP是一个中间服务器,你的请求先发送到代理IP,再由代理IP发送到目标网站,目标网站只能看到代理IP的地址,看不到你的真实IP。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1496

Flink系列之Flink基础使用与核心概念

Flink系列之Flink基础使用与核心概念

luoyepiaoxue2014的博客 264

个人顶级AI助手OpenClaw(Clawdbot) - 新手快速入门指南

本文详细介绍了个人顶级AI助手OpenClaw(Clawdbot) 的快速入门指南,包括安装部署和使用配置及注意事项

program哲学 5302

Flink 源码系列 - 前言

本文介绍了Flink源码学习系列的前言,规划。

qq_43552242的博客 2112

高分六号WFV预处理详细步骤(辐射校正、大气校正、几何校正)

高分六号WFV传感器获得的影像的预处理分为两个步骤:辐射校正和大气校正,辐射校正为了消除传感器的自身误差,大气校正为了消除大气的折射误差。 一、辐射校正 按照红框中信息进行更改。 辐射校正前地物光谱反射率: 校正后的地物光谱曲线的变化: 二、大气校正 ENVI中大气校正一般采用Flaash模型,但是这个模型需要设置许多的参数十分的麻烦,所以采用ENVI商店(app store,这个也需要下载的)里的Flaash Easy To Use 这个插件,可以快速地进行大气校正。 大气校正后的地物反射率 这

qq_41828818的博客 1万+

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5717

Flink核心概念

当要处理的数据量非常大时,我们可以把一个算子操作,“复制”多份到多个节点,数据来了之后就可以到其中任意一个执行。这样一来,一个算子任务就被拆分成了多个并行的“子任务”(subtasks),再将它们分发到不同节点,就真正实现了并行计算。在Flink执行过程中,每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中完全独立地执行。一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)

优质大数据领域知识记录 1476

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Flink CDC系列之:学习理解核心概念——Data Pipeline

Route 指定匹配一串 source-table 到 sink-table 的规则,最典型的场景是分库分表合并,将多个上游 source 表路由到同一张 sink 表。由于 Flink CDC 中的事件以管道方式从上游流向下游,因此整个 ETL 任务被称为数据管道。在连接外部系统时,需要与外部系统的存储对象建立映射关系,这就是 Table Id 所指的。Transform模块帮助用户根据表中的数据列进行数据列的删除和扩展。数据源用于访问元数据并从外部系统读取更改的数据。数据接收器可以同时写入多个表。

zhengzaifeidelushang的博客 1913

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flink的一些核心概念

初识 Flink,我觉得需要了解一些基本的概念,对后续开发 Flink 程序有帮助 1、抽象层级 flink 对开发流式 / 批处理应用提供了不同的抽象层级 最底层的抽象仅仅提供了 stateful streaming ,它利用 process function 嵌入到 DataStream API 里,允许用户可以自由地处理来自一个或多个流数据的事件,并使用一致、容错的状态。除此之外,用...

zuolixiangfisher的博客 830

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flink基本API及核心概念详解

一.概述 Flink程序是常规程序,可对分布式集合进行转换(例如,过滤,映射,更新状态,联接,分组,定义窗口,聚合)。集合最初是从源创建的(例如,通过读取文件,kafka主题或本地内存中的集合)。结果通过接收器返回,接收器可以将数据写入(分布式)文件或标准输出(例如,命令行终端)。Flink程序可以在各种上下文中运行,独立运行或嵌入其他程序中。执行可以在本地JVM或许多计算机的群集中进行。 根据数据源的类型(即有界或无界源),您将编写批处理程序或流程序,其中DataSet API用于批处理,而DataStr

踏雪无痕 860

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程

1、提交 job,执行运行程序的脚本(flink run)后,会生启动一个客户端进程。 2、客户端进程中会解析一些参数,如:-c(全类名) 3、生成逻辑流图(StreamGraph),通过 Operator Chain 对算子优化后,生成作业流图(JobGraph) 4、对解析完成的参数进行封装,然后通过内部的 Actor 通信系统(基于 RPC)提交、或取消(flink cancel)、或更新,将任务发送给 JobManager。 5、JobManager 自身也会有一个 Actor 通信系统

weixin_53543905的博客 2026
上一篇: Flink详解系列之四--时间
下一篇: Flink详解之一--概述
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值