Flink DataStream 体系

news2025/1/9 12:41:57

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


思维导图

在这里插入图片描述


正文

对 Flink 这种以流为核心的分布式计算引擎而言,数据流是核心数据抽象,表示一个持续产生的数据流,与 Apache Beam 中的 PCollection 的概念类似。

在 Flink 中使用 DataStream 表示数据流, DataStream 是一种逻辑概念,并不是底层执行的概念。

DataStream 上定义了常见的数据处理操作 API (转换为 Transtormation ),同时也具备自定义数据处理两数的能力,当 DataStream 提供的常见操作不满足需求的时候,可以自定义数据处理的逻辑。

DataStream 体系如下图所示。

在这里插入图片描述

DataStreamSource 本身就是一个 DataStream。DataStreamSink 、 AsyncDatastream 、 BroadcastDataStream 、 BroadcastConnectedDataStream 、 QueryableDataStream 都是对一般 DataStream 对象的封装,在 DataStream 实现特定的功能,接下来对这些 DataStream 一一进行介绍。

  1. DataStreamFlink 数据流的核心抽象,其上定义了对数据流的一系列操作,同时也定义了与其他类型 DataStream 的相互转换关系。 每个 DataStream 都有一个 Transformation 对象,表示该 DataStream 从上游的 DataStream 使用该 Transformation 而来。
  2. DataStreamSource 是 DataStream 的起点, DataStreamSource 在 StreamExecutionEnvironment 中创建,由 StreamExecutionEnvironment.addSourcce ( SourceFunction )创建而来,其中 SourceFunction 中包含了 DataStreamSource 从数据源读取数据的具体逻辑。
  3. DataStreamSink 数据从 DatasourceStream 中读取,经过中问的一系列处理操作,最终需要写出到外部存储,通过 DataStream.addSink(sinkFunction)创建而来,其中 SinkFunction 定义了写出数据到外部存储的具体逻辑。
  4. KeyedStream用来表示根据指定的 key 进行分组的数据流。 一个 keyedStream 可以通过调用 DataStream.keyBy()来获得。 而在 KeyedStream 上选行任何 Transformation 都将转变回 DataStream 。 在实现中, KeyedStream 把 key 的信息写人了 Transformation 中。 每条记录只能访问所属 key 的状态,其上的聚合两数可以方便地操作和保存对应 key 的状态。
  5. WindowedStream & AllWindowedStream WindowedStream 代表了根据 key 分组且基于 WindowAssigner 切分窗口的数据流。 所以 WindowedStream 都是从 KeyedStream 衍生而来的,在 WindowedStream 上进行任何 Transformation 也都将转变回 DataStream
  6. JoinedStreams & CoGroupedStreams Join 是 CoGroup 的一种特例, JoinedStreams 底层使用 CoGroupedStreams 来实现。

Join 和 CoGroup 两者的区别如下:CoGrouped 侧重的是 Group ,对数据进行分组,是对同一个 key 上的两组集合进行操作,可以编写灵活的代码来实现特定的业务功能。 Join 侧重的是数据对,对同一个 key 的每一对元素进行操作。 CoGroup 更通用,但因为 Join 是数据库上常见的操作,所以在 CoGroup 基础上提供 Join 的特性。 JoinGroup 和 CoGroup 两者都是对特续不断地产生的数据做运算,但是又不能无限地在内存中持有数据,对所有的数据进行 Join 的笛卡儿积操作理论上不可行(理论上内存不足可以刷出到磁盘,反复的硬盘读写会导致性能变得很差),所以在底层上,两者都基于 Window 实现。

  1. ConnectedStreams 表示两个数据流的组合,两个数据流可以类型一样,也可以类型不一样。 ConnectedStreams 适用于两个有关系的数据流的操作,共享 State。 一种典型的场景是动态规则数据处理。 两个流中一个是数据流,一个是随着时间更新的业务规则,业务规则流中的规则保存在 State 中,规则会持续更新 State。 当数据流中的新数据到来时,使用保存在 State 中的规则进行数据处理。
  2. BroadcastStream & BroadcastConnectedStream BroadcastStream 实际上是对一个普通 DataStream 的封装,提供了 DataStream 的广播行为。 BroadcastConnectedStream 一般由 DataStream / KeyedDataStream 与 BroadcastStream 连接而来,类似于 ConnectedStream 。
  3. IterativeStream 是对一个 DataStream 的迭代操作,从逻辑上来说,包含 IterativeStream 的 Dataflow 是一个有向有环图,在底层执行层面上, Flink 对其进行了特殊处理。
  4. AsyncDataStream 是个工具,提供在 DataStream 上使用异步函数的能力。

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

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

相关文章

中文版开源!这或许是最经典的编程教材

大家好,我是涛哥。 《Think Python》是很多Python初学者的不二入门教材,受到广泛好评。该书原作者是美国Olin工程学院的教授Allen B. Downey,目前该书的原版和中文翻译电子版本都已免费开源。 该书可以直接在官网下载或者阅读英文版第二版&a…

Linux系统编程:文件编程

一 常用API 打开、创建、关闭文件&#xff0c;读写文件&#xff0c;利用man指令查询相关说明 open & create man 2 open 或 man 2 create NAMEopen, creat - open and possibly create a file or deviceSYNOPSIS#include <sys/types.h>#include <sys/stat.h…

海外专线网络费用

在企业海外扩展和开展业务时&#xff0c;建立可靠的网络连接是至关重要的。而海外SD-WAN专线网络作为一种优化广域网连接的解决方案&#xff0c;提供更好的连接质量和性能。本文将介绍海外SD-WAN专线网络的费用组成&#xff0c;帮助企业更好地了解和规划网络投资。 1. 专线租用…

python趣味编程-恐龙克隆游戏

Python 中使用 Turtle 的恐龙克隆游戏免费源代码 使用 Turtle 的恐龙克隆游戏是一个用Python编程语言编码的桌面游戏应用程序。该项目包含在 Chrome 浏览器中克隆实际恐龙游戏的多种功能。该项目可以使正在修读 IT 相关课程的学生受益。这个应用程序非常有趣,可以帮助您学习创…

博客之QQ登录功能(一)

流程图 上图spring social 封装了1-8步需要的工作 1、新建包和书写配置文件 public class QQProperties {//App唯一标 识private String appId "100550231";private String appSecret "69b6ab57b22f3c2fe6a6149274e3295e";//QQ供应商private String…

1688API接入说明(1688商品详情+关键词搜索商品列表)商品详情数据,商品sku数据

1688商家订单详情API接口可以帮助你开拓新的业务机会。通过API&#xff0c;你可以将自己的业务系统与1688平台连接起来&#xff0c;利用1688平台丰富的资源和渠道优势&#xff0c;扩大你的业务范围。此外&#xff0c;1688商家订单详情API接口还支持多种语言和格式&#xff0c;如…

Docker入门,Docker是什么?有什么用?该怎么用?

目录 1. 项目部署时的复杂性&#xff1f; 2. Docker是如何解决依赖兼容问题的&#xff1f; 3. 众多Linux操作系统发行版的区别 4. Docker 是如何实现跨系统运行的&#xff1f; 5. Docker与虚拟机的差别 6. 镜像(Image)与容器(Container) 7. DockerHub 8. Docker 架构 …

Python 操作 CSV

使用过 CSV 文件都知道&#xff1a;如果我们的电脑中装了 WPS 或 Microsoft Office 的话&#xff0c;.csv 文件默认是被 Excel 打开的&#xff0c;那么什么是 CSV 文件&#xff1f;CSV 文件与 Excel 文件有什么区别&#xff1f;如何通过 Python 来操作 CSV 文件呢&#xff1f;带…

创建开机自启的脚本

在启动许多ros节点时有多种方式&#xff0c;我推荐使用launch来启动所有的节点&#xff0c;这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动&#xff1a; 脚本位置不限&#xff0c;只需要&#xff1a; sudo gedit xxx.sh在里面添加相应的…

网站框架识别方法

cms一般有dedecms(织梦&#xff09;&#xff0c;dzcms&#xff0c;phpweb&#xff0c;phpwind&#xff0c;phpcms&#xff0c;ecshop&#xff0c;dvbbs&#xff0c;siteweaver&#xff0c;aspcms&#xff0c;帝国&#xff0c;zblog&#xff0c;wordpress等。 一般cms都有特定的…

ES6——知识点记录

这里写目录标题 1.字符串支持1.codePointAt——根据字符串码元的位置得到其码点2.includes——判断字符串中是否包含指定的子字符串3.startsWith——判断字符串中是否以指定的字符串开始4.endsWith——判断字符串中是否以指定的字符串结尾5.repeat——将字符串重复指定的次数&a…

AB试验(二)统计基础

AB试验&#xff08;二&#xff09;统计基础 随机变量 均值类指标&#xff1a;如用户的平均使用时⻓、平均购买金额、平均购买频率等 概率类指标&#xff1a;如用户点击的概率(点击率)、转化的概率(转化率)、购买的概率 (购买率)等 经验结论&#xff1a;在数量足够大时&#…

Vibro-meter VM600 200-510-041-021数字量控制板卡

Vibro-meter VM600 200-510-041-021 数字量控制模块通常用于振动监测和机械设备的控制系统中&#xff0c;以执行振动数据采集、分析和控制任务。以下是通常情况下数字量控制模块的一些产品特点&#xff1a; 多通道输入&#xff1a;这些模块通常配备多个输入通道&#xff0c;以接…

浅析数字孪生在科学研究中的作用和优势

在科学研究领域&#xff0c;数字孪生技术正迅速崭露头角&#xff0c;为研究人员提供了前所未有的工具和资源&#xff0c;以更深入、更全面地理解复杂的自然现象和系统。本文带大家探讨数字孪生对科学研究的作用&#xff1a; 1. 精准建模和仿真 数字孪生技术允许科学家创建真实…

【Minecraft】Lucky Block(幸运方块)mod介绍

文章目录 mod介绍支持版本mod作者合成方式幸运值使用方法总结 mod介绍 幸运方块模组虽然只是添加了一个方块&#xff0c;两种武器&#xff0c;一种药水&#xff0c;但拥有超过一百种可能性&#xff01; 简单地打破幸运方块&#xff0c;它将开出意想不到的东西&#xff01; 你可…

云原生安全性:构建可信任的云应用的最佳实践

文章目录 云原生安全性的重要性1. 数据隐私2. 恶意攻击3. 合规性要求4. 业务连续性 构建可信任的云应用的最佳实践1. 安全开发2. 身份验证与授权3. 容器安全性4. 监控与审计5. 持续集成与持续交付&#xff08;CI/CD&#xff09;6. 安全培训和教育 未来趋势&#xff1a;服务网格…

Swagger 使用教程

Swagger 官网&#xff1a; API Documentation & Design Tools for Teams | Swagger 整合swagger 依赖&#xff1a; springfox-swagger2 springfox-swagger-ui <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</a…

气象站:从气候预测到环境监测

在我们的日常生活中&#xff0c;气象站的存在可能并不显眼&#xff0c;但实际上&#xff0c;它对我们的生活产生了重要的影响。气象站是一种用于收集和监测天气数据的设施&#xff0c;通过它&#xff0c;我们可以获得各种关于气候和天气的宝贵信息。那么&#xff0c;气象站可以…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …