Flink DataStream 体系
前言
本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见大数据技术体系
思维导图

正文
对 Flink 这种以流为核心的分布式计算引擎而言,数据流是核心数据抽象,表示一个持续产生的数据流,与 Apache Beam 中的 PCollection 的概念类似。
在 Flink 中使用 DataStream 表示数据流, DataStream 是一种逻辑概念,并不是底层执行的概念。
DataStream 上定义了常见的数据处理操作 API (转换为 Transtormation ),同时也具备自定义数据处理两数的能力,当 DataStream 提供的常见操作不满足需求的时候,可以自定义数据处理的逻辑。
DataStream 体系如下图所示。

DataStreamSource 本身就是一个 DataStream。DataStreamSink 、 AsyncDatastream 、 BroadcastDataStream 、 BroadcastConnectedDataStream 、 QueryableDataStream 都是对一般 DataStream 对象的封装,在 DataStream 实现特定的功能,接下来对这些 DataStream 一一进行介绍。
DataStream是 Flink 数据流的核心抽象,其上定义了对数据流的一系列操作,同时也定义了与其他类型 DataStream 的相互转换关系。 每个 DataStream 都有一个 Transformation 对象,表示该 DataStream 从上游的 DataStream 使用该 Transformation 而来。DataStreamSource是 DataStream 的起点, DataStreamSource 在 StreamExecutionEnvironment 中创建,由 StreamExecutionEnvironment.addSourcce ( SourceFunction )创建而来,其中 SourceFunction 中包含了 DataStreamSource 从数据源读取数据的具体逻辑。DataStreamSink数据从 DatasourceStream 中读取,经过中问的一系列处理操作,最终需要写出到外部存储,通过 DataStream.addSink(sinkFunction)创建而来,其中 SinkFunction 定义了写出数据到外部存储的具体逻辑。KeyedStream用来表示根据指定的 key 进行分组的数据流。 一个 keyedStream 可以通过调用 DataStream.keyBy()来获得。 而在 KeyedStream 上选行任何 Transformation 都将转变回 DataStream 。 在实现中, KeyedStream 把 key 的信息写人了 Transformation 中。 每条记录只能访问所属 key 的状态,其上的聚合两数可以方便地操作和保存对应 key 的状态。WindowedStream & AllWindowedStreamWindowedStream 代表了根据 key 分组且基于 WindowAssigner 切分窗口的数据流。 所以 WindowedStream 都是从 KeyedStream 衍生而来的,在 WindowedStream 上进行任何 Transformation 也都将转变回 DataStreamJoinedStreams & CoGroupedStreamsJoin 是 CoGroup 的一种特例, JoinedStreams 底层使用 CoGroupedStreams 来实现。
Join 和 CoGroup 两者的区别如下:CoGrouped 侧重的是 Group ,对数据进行分组,是对同一个 key 上的两组集合进行操作,可以编写灵活的代码来实现特定的业务功能。 Join 侧重的是数据对,对同一个 key 的每一对元素进行操作。 CoGroup 更通用,但因为 Join 是数据库上常见的操作,所以在 CoGroup 基础上提供 Join 的特性。 JoinGroup 和 CoGroup 两者都是对特续不断地产生的数据做运算,但是又不能无限地在内存中持有数据,对所有的数据进行 Join 的笛卡儿积操作理论上不可行(理论上内存不足可以刷出到磁盘,反复的硬盘读写会导致性能变得很差),所以在底层上,两者都基于 Window 实现。
ConnectedStreams表示两个数据流的组合,两个数据流可以类型一样,也可以类型不一样。 ConnectedStreams 适用于两个有关系的数据流的操作,共享 State。 一种典型的场景是动态规则数据处理。 两个流中一个是数据流,一个是随着时间更新的业务规则,业务规则流中的规则保存在 State 中,规则会持续更新 State。 当数据流中的新数据到来时,使用保存在 State 中的规则进行数据处理。BroadcastStream & BroadcastConnectedStreamBroadcastStream 实际上是对一个普通 DataStream 的封装,提供了 DataStream 的广播行为。 BroadcastConnectedStream 一般由 DataStream / KeyedDataStream 与 BroadcastStream 连接而来,类似于 ConnectedStream 。IterativeStream是对一个 DataStream 的迭代操作,从逻辑上来说,包含 IterativeStream 的 Dataflow 是一个有向有环图,在底层执行层面上, Flink 对其进行了特殊处理。AsyncDataStream是个工具,提供在 DataStream 上使用异步函数的能力。
相关文章:
Flink DataStream 体系
前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 思维导图 正文 对 Flink 这种以流为核心的分布式计…...
Linux的调试工具 - gdb(超详细)
Linux的调试工具 - gdb 1. 背景2. 开始使用指令的使用都用下面这个C语言简单小代码来进行演示:1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。2. list或l 函数名:列出某个函数的源代码。3. r或run: 运行程序。…...
已知平面内三点,求其平面的法向量
三点平面法向量 设三点坐标为A(x1,y1,z1),B(x2,y2,z2),C(x3,y3,z3) 向量AB(x2-x1,y2-y1,z2-z1),AC(x3-x1,y3-y1,z3-z1) AB、AC所在平面的法向量即ABAC(a,b,c),其中: a(y2-y1)(z3-z1)-(z2-z1)(y3-y1) b(z2-z1)(x3-x1)-(z3-z1)(x2-x1) c(x2-x1)(y3-y1)-(x3-x1)(y2-y1)…...
HTML
HTML 1.HTML结构 1.1认识HTML HTML是超文本标记语言,电脑上看到的所有网站都是html实现的 HTML代码是“标签”构成的,简单来说,html就是一堆标签的组合 形如 <body>hello</body>标签名 (body) 放到 < > 中 大部分标签成…...
Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例
Java手写最大子数组和算法(如Kadane算法)和最大子数组和算法(如Kadane算法)应用拓展案例 1. 算法思维导图 以下是使用mermaid代码表示的Kadane算法的实现原理: #mermaid-svg-rI7hVAVsP1qtjZK7 {font-family:"tr…...
掌握NVM、NRM和NPM:Node.js开发的利器
**掌握NVM、NRM和NPM:Node.js开发的利器** 背景介绍:如何使用NVM:在Windows上安装NVM:在macOS上安装NVM:配置NVM:常用NVM命令: 如何使用NRM:安装NRM:配置全局NRM…...
Nacos 2.2.3 部署到linux
到https://github.com/alibaba/nacos/releases 下载编译后压缩包,如nacos-server-2.2.3.tar.gz这种,里面包含有nacos的jar包,不然启动不了 1.新建并初始化数据库 创建nacos数据库,执行mysql-schema.sql文件,这个文件…...
设计模式之十:状态模式
状态模式通过改变对象内部的状态来帮助对象控制自己的行为。 这是一张状态图,其中每个圆圈都是一个状态。 最简单,第一反应的实现就是使用一个变量来控制状态值,并在方法内书写条件代码来处理不同情况。 package headfirst.designpatterns.…...
Python 的运算符和语句(条件、循环、异常)基本使用指南
运算符的分类 算数运算符赋值运算符复合赋值运算符比较运算符逻辑运算符 算数运算符 运算符描述实例加1 1 输出结果为 2-减1 - 1 输出结果为 0*乘2 * 2 输出结果为 4/除10 / 2 输出结果为 5//整除9 // 4 输出结果为 2%取余9 % 4 输出结果为 1**指数2 ** 4 输出结果为 16&…...
文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题
三、用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本。 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示。这个版本使用 Go 语言编写,利用随机化来选择一个元素,并在循环中不断地调整选择的元素&#x…...
React中组件通信01——props
React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子(…...
接口测试——接口协议抓包分析与mock_L1
目录: 接口测试价值与体系常见的接口协议接口测试用例设计postman基础使用postman实战练习 1.接口测试价值与体系 接口测试概念 接口:不同的系统之间相互连接的部分,是一个传递数据的通道接口测试:检查数据的交换、传递和控制…...
四种常用的自动化测试框架
一直想仔细研究框架,写个流水账似的测试程序不难,写个低维护成本的测试框架就很难了,所以研究多种测试框架还是很有必要的,知道孰优孰劣,才能在开始编写框架的时候打好基础,今天读到了KiKi Zhao的翻译文章&…...
Fuxploider:一款针对文件上传漏洞的安全检测与研究工具
Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…...
Unity 安装及运行MLAgents
1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…...
LightDB-A 兼容oracle支持mod操作符
LightDB-A 兼容oracle支持mod操作符 LightDB-A 为了兼容oracle,从23.3版本开始支持mod操作符,其语义同 ‘%’ 操作符,使用案例如下: select 5 mod 2;?column? ----------1 (1 row)select 0 % 0; ERROR: division by zerosel…...
SpringMVC之自定义注解
目录 一、Java注解 1.1 注解简介 1.2 注解分类 1.3 JDK基本注解 1.4 JDK元注解 1.5 自定义注解 1.5.1 标记注解 1.5.2 元数据注解 1.6 如何自定义注解 二、自定义注解的基本案例 2.1 案例一(获取类、方法以及属性上的注解) 2.1.1 Ingerited的…...
QT:使用普通按钮、网格布局管理器、标签、行编辑器、水平布局管理器、垂直布局管理器做一个小项目
widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> //普通按钮 #include <QGridLayout> //网格布局管理器 #include <QLabel> //标签 #include <QLineEdit> //行编辑器 #include <QHBoxLayo…...
【小沐学写作】程序员必备技能:在线协作文档汇总
文章目录 1、简介2、微软Office在线文档2.1 功能简介2.2 使用费用2.3 用户体验 3、石墨文档3.1 功能简介3.2 使用费用 4、腾讯文档4.1 功能简介4.2 使用费用 5、语雀5.1 功能简介5.2 使用费用 6、飞书6.1 功能简介6.2 使用费用 7、印象笔记7.1 功能简介7.2 使用费用 结语 1、简…...
「工具|数据接口」免费公开的REST API 如何借助github搭建自己的fake API接口
本文主要介绍日常开发、测试、教学或者分享中,可能遇到的模拟数据问题。分享免费开发的测试数据接口,以及如何利用github快速搭建定制化的接口数据,避免使用真实数据的风险以及自己现编数据的麻烦。 文章目录 一、场景说明二、免费公开的Fak…...
RevokeMsgPatcher:突破微信消息限制的高效管理工具
RevokeMsgPatcher:突破微信消息限制的高效管理工具 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/G…...
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析
OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析 1. 问题背景与诊断框架 上周我在尝试用OpenClaw对接本地部署的QwQ-32B模型时,遇到了一个典型问题:简单的文件整理任务总是执行到一半就中断,控制台只显示"模型响应超时&qu…...
OpenClaw对话增强:nanobot模型微调提升任务理解准确率
OpenClaw对话增强:nanobot模型微调提升任务理解准确率 1. 为什么需要专业场景的模型微调 在测试OpenClaw基础版本时,我发现一个明显痛点:当处理专业领域的自动化任务时,通用大模型经常出现"理解偏差"。比如在医疗文献…...
DSP28335串口调试:从printf重定向到稳定数据输出的实战解析
1. 为什么需要printf重定向? 在DSP28335开发过程中,printf函数是我们最常用的调试工具之一。想象一下,当你需要实时查看算法运行状态、变量数值或者系统日志时,如果每次都要停下来用调试器查看,那效率得多低啊…...
电子元器件检测数据集VOC+YOLO格式1032张5类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1032标注数量(xml文件个数):1032标注数量(txt文件个数):1032标注类别…...
开源项目国际化:多语言配置全流程指南
开源项目国际化:多语言配置全流程指南 【免费下载链接】pivottable Open-source Javascript Pivot Table (aka Pivot Grid, Pivot Chart, Cross-Tab) implementation with dragndrop. 项目地址: https://gitcode.com/gh_mirrors/pi/pivottable 跨国团队如何让…...
别死记硬背了!用Python的NumPy库,5分钟搞定线性代数里的矩阵运算(附代码)
用Python的NumPy库轻松玩转线性代数:矩阵运算实战指南 线性代数作为现代科学与工程的基石,在机器学习、计算机图形学、量化金融等领域无处不在。但传统教材中抽象的数学符号和繁琐的手工计算,往往让学习者望而生畏。今天,我们将用…...
YOLOv5在边缘设备上部署实战:从Jetson Nano到树莓派,实现实时路面障碍检测
YOLOv5边缘计算部署实战:从Jetson Nano到树莓派的高性能路面检测方案 当自动驾驶小车需要识别前方突然出现的石块,或是智慧路侧单元要实时监控道路异常时,边缘设备上的AI推理能力就成为关键。本文将带您深入探索如何将YOLOv5模型部署到Jetson…...
5个维度掌握wechat-api:从入门到生产的微信机器人开发指南
5个维度掌握wechat-api:从入门到生产的微信机器人开发指南 【免费下载链接】wechat-api 🗯 wechat-api by java7. 项目地址: https://gitcode.com/gh_mirrors/we/wechat-api 核心价值:企业为什么需要微信机器人? 在数字化…...
OpenClaw异常处理手册:百川2-13B任务失败排查全攻略
OpenClaw异常处理手册:百川2-13B任务失败排查全攻略 1. 为什么需要这份手册 上周我尝试用OpenClaw百川2-13B模型自动处理日报生成任务时,连续三天凌晨任务失败。每次起床看到控制台的红色错误提示,都要花半小时翻日志找原因。最崩溃的是&am…...
