再谈 Flink 的 “动态表” 和 “流表二象性”

《大数据平台架构与原型实现:数据中台建设实战》博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维码进入京东手机购书页面。

尽管我们在此前的多篇文章中介绍过动态表的概念,但这个概念确实有一些抽象,伴随着学习的地深入,也会有会新的领悟,本文再次去动态表和表流二象性做一些梳理。此前对动态表的介绍可参考《Flink 动态表 (Dynamic Table) 解读》和《Flink 实时数仓关键技术解读:Upsert Kafka 和 动态表》两篇文章。

1. 回顾


[ 官方文档 ] 中绘制过这样一张描述动态表和连续查询的图:

Dynamic tables

  1. 将流转换为动态表。
  2. 在动态表上计算一个连续查询,生成一个新的动态表。
  3. 生成的动态表被转换回流。

注意:动态表首先是一个逻辑概念。在查询执行期间不一定(完全)物化动态表;此外,要注意的一点是:“状态”(State)是维迟在持续查询上的,不是动态表上,这一点不搞错,是查询本身的内容(SQL)决定了会维持什么样的“转态”!

但是,从”表流一体“或”流表二象性“的角度看,其实改为下面这样会更准确一些,至于为什么,我们在下一节介绍完“表流二象性”后就会理解。

stream-query-stream

2. 流表二象性


对于“动态表”在使用时是一张“表”,实际运行的形态却是一条“流”这种情形被概括为“表流二象性”,下面的动图非常好的解释了流表之间的关系:

Figure 4. Every table has its own change stream (also called a changelog).

在这张动图中,我们可以形象而准确地看到:

  • 下侧的 Stream 和 中间 Table 的 ”联动“ 很好地诠释了 ”表流一体“ 或 ”表流二象性“,如果非要再细致一点解释的话,此时中间 Table 的输出其实是 Flink Sql Client 在 Table 模式下的输出(自动刷新表的当前转态)

  • 伴随流上数据不停地输入,表本身也是在不断变化的,且这种变化是由输入数据直接触发的,是一种固有的动态能力,与批处理中的轮训完全是两回事,这大概就是”动态表“叫法的来历

  • 上侧的 Stream 记录的是表自身的 changelog,也就是交给下游或物化时的 ”输出“(也是一条流)

下图是另一张解释 ”表流一体“ 或 ”表流二象性“的动图,相对上一张图,它用棋盘举例更加形象:

Figure 1. Streams record history. Tables represent state.

不过,这张图并没有上一张图严谨,主要的问题在于:没有说明左侧的”操作记录“流是右侧棋局变化的”因“还是”果“,如果是”因“,那左侧就是输入的数据流,右侧是对应的动态表,这时相当于上一张图中的 ”Stream“ 和 ”Tabel“ 两条线;如果是”果“,那左侧就是输出的数据流,右侧依然是动态表,这时相当于上一张图中的 ”Stream(changelog)“ 和 ”Tabel“ 两条线。

3. 从代码层面重新理解


现在,我们得从实际代码层面把动态表的概念打通,核心问题就是:动态表的 DDL 定义了什么?持续查询又做了什么?这方面,有如下重要的结论:

所谓“动态表的 DDL”这种叫法其实是有问题的,因为动态表就是流上的结构化数据,没有 DDL 这一说,并且,也并不是所有的动态表都和一个 DDL 相对应,考虑一个只有 SELECT 没有 INSERT INTO 的持续查询,SELECT 的结果集肯定也是一张动态表,对应一个转换后的流,但它是没有对应的 DDL 的。Flink SQL 的 DDL 定义的其实是流的 Source 或 Sink 的连接方式、数据结构、传输格式。只是绝大多数的流都是从一个 Source Table 到一个复杂的持续查询(INSERT INTO … SELECT …)最后写入一个 Sink Table,会让人习惯性地把 DDL 当作了 动态表 的定义,这一点一定要注意其中细微差别!

3.1 动态表定义了什么?


动态表的 DDL 定义了三项核心要素:

  • 数据结构
  • 数据源(connector)
  • 传输格式(format)

有了这些信息,Flink 就可以:

  • 当动态表是 Source 时:从源头获得数据 -> 按指定的数据结构封装成指定的格式传输 -> 成为数据流 / 表现为一张表(动态表)
  • 当动态表是 Sink时:实时读取动态表(动态表的 changelog 流) -> 按指定的数据结构封装成指定的格式传输 -> 写入目标数据源

3.2 持续查询又做了什么?


从 ETL 的角度看,持续查询完成了最核心的 ETL 逻辑,从整个流式处理管道的角度看,是持续查询驱动了整个 Pipeline 运转,只有动态表的 DDL,不会有任何流或对应的动态表产生,只有当一个持续查询启动时,整条流式链路才会创建并运转起来。下图能更好地体现“流”,“动态表”,“持续查询”三者之间的关系:

请添加图片描述

参考资料

https://www.confluent.io/blog/kafka-streams-tables-part-1-event-streaming/#stream-table-duality

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Matlab的视频人体动作识别,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

Ribbon知识点

1、通过类实现重写Ribbon规则 1.1注意 这个类一定不能跟启动类放在同一个包下面,不能被componentScan给扫描到。 需要如图放置: 要是被componentScan给扫描到,则会被所有的服务提供方所共享,那么就不能实现指定服务用不同的Ribbo…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑,一台笔记本一台台式机,拥有各自拥有鼠标和键盘,但总是需要切换,感觉太麻烦,想找个简单的方式,不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

Go语言学习04~05 函数和面向对象编程

Go语言学习04-函数 函数是一等公民 <font color"Blue">与其他主要编程语言的差异</font> 可以有多个返回值所有参数都是值传递: slice, map, channel 会有传引用的错觉函数可以作为变量的值函数可以作为参数和返回值 学习函数式编程 可变参数 func s…

Docker基本操作

我们可以通过 docker --help 查看所有命令 我们可以通过docker hub 拉取 Docker hub官网链接 接着 输入 docker images 查看刚才拉取的nginx镜像 镜像常见操作 docker imagesdocker rmidocker pulldocker pushdocker savedocker load

【图解物联网】第1章 物联网的基础知识

1.1 物联网入门 1.1.1 物联网 物联网的英语是Internet of Things&#xff0c;缩写为IoT&#xff0c;这里的“物”指的是我们身边一切能与网络相连的物品。只要能与网络相连&#xff0c;就都是物联网说的“物”。 物联网就是“物”之间通过连接互联网来共享信息并产生…

信息学奥赛之MAC端VSCode C++环境配置

前提 安装 Visual Studio CodeVSCode 中安装 C/C扩展确保 Clang 已经安装&#xff08;在终端中输入命令&#xff1a;clang --version 来确认是否安装&#xff09;未安装&#xff0c;在命令行执行xcode-select --install 命令&#xff0c;会自行安装&#xff0c;安装文件有点大…

如何将OpenCV Java 与Eclipse结合使用

返回目录&#xff1a;OpenCV系列文章目录 上一篇&#xff1a;OpenCV-Java 开发简介 下一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 正文&#xff1a; 警告&#xff1a;本教程可以包含过时的信息。 从 2.4.4 版本开始&#xff0c;OpenCV 支持 Java。在本教程中&…

力扣454. 四数相加 II

思路&#xff1a;把四个数组拆成两对&#xff0c;两个分别相加&#xff0c;记录第一对的相加结果进map里&#xff0c;再把第二对数组 0-nums2-nums4 去map里面找出现了几次&#xff0c;这题不用对重复的四元组去重&#xff0c;所以出现多次都有效。 class Solution {public int…

vue3+ts+vite axios封装请求并扩展入参

requset.ts import axios, { AxiosResponse } from axios import { getToken, removeToken } from /utils/auth// 创建axios实例 const service axios.create({baseURL: , // 所有的请求地址前缀部分(没有后端请求不用写)timeout: 60000 // 请求超时时间(毫秒)// withCredent…

MySQL Workbench连接云服务器内网数据库

在项目上遇到一个问题&#xff0c;生产环境是Centos&#xff0c;分配了两台云服务器&#xff0c;一台应用服务&#xff0c;一台数据库服务&#xff0c;应用服务与数据库服务采用内网连接。我作为开发和运维方&#xff0c;有权限直接访问应用服务&#xff0c;但是数据库服务器需…

“低代码+平台”:驱动企业数字化转型与创新的新引擎

“低代码平台”作为一种新兴的软件开发范式&#xff0c;正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于&#xff0c;将传统软件开发的复杂性大大降低&#xff0c;赋予了非技术人员或轻量级开发者快速构建应用的能力&#xff0c;并能灵…

Flink实战之FlinkSQL键设计对于数据保序的必要性

乱序数据处理对于实时ETL至关重要&#xff0c;处理不好将会导致数据不一致场景发生。对于数据乱序场景&#xff0c;一般工程师已知上游数据乱序会对本身消费数据产生影响&#xff0c;但不一定晓得的是&#xff0c;一个SQL本身也可能造成数据乱序&#xff0c;严格意义上的数据乱…

优思学院|APQP产品质量先期策划全面指南

产品质量先期策划&#xff08;APQP&#xff09;是什么&#xff1f; 产品质量先期策划&#xff08;APQP&#xff09;是针对复杂产品和供应链在推出新产品时存在的众多失败可能性&#xff0c;目的在于确保新产品或新流程能够获得客户满意的一种结构化过程。 在复杂的产品和供应…

硬盘哨兵Hard Disk Sentinel Pro V6.20.0.0 便携版

Hard Disk Sentinel 是一款功能强大的硬盘监控和分析软件&#xff0c;专为 Windows 用户设计。它可以实时监测硬盘驱动器&#xff08;HDD&#xff09;、固态硬盘&#xff08;SSD&#xff09;、混合硬盘&#xff08;SSHD&#xff09;、NVMe SSD、RAID 数组和外部 RAID 盒子的健康…

马斯克开源Grok-1

Grok-1是由马斯克AI创企xAI发布的第一代大语言模型&#xff0c;它以其巨大的参数量——高达3140亿&#xff0c;引起了全球范围内的广泛关注。这一参数量远超其他知名模型&#xff0c;如OpenAI的GPT-3.5&#xff0c;后者仅有1750亿参数。在2024年3月17日&#xff0c;马斯克宣布将…

一图看懂伙伴系统 Buddy System

伙伴系统是一种在操作系统内核中使用的管理物理内存的算法。它主要应用于现代计算机系统中&#xff0c;特别是在Linux等类Unix系统中。 基本思想&#xff1a;将物理内存分割成不同大小的块&#xff0c;每个块包含一定数量的连续页面。这些块的大小通常是2的幂次方&#xff0c;…

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

Expert Prompting-引导LLM成为杰出专家

ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示&#xff0c;对齐的大型语言模型&#xff08;LLM&#xff09;的回答质量可以显著提高。在本文中&#xff0c;我们提出了ExpertPrompting&#xff0c;以激发LLM作为杰出专家回…