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

这篇具有很好参考价值的文章主要介绍了再谈 Flink 的 “动态表” 和 “流表二象性”。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

1. 回顾


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

再谈 Flink 的 “动态表” 和 “流表二象性”,大数据专题,flink,动态表,流表二象性,dynamic,changlog

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

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

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

再谈 Flink 的 “动态表” 和 “流表二象性”,大数据专题,flink,动态表,流表二象性,dynamic,changlog

2. 流表二象性


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

再谈 Flink 的 “动态表” 和 “流表二象性”,大数据专题,flink,动态表,流表二象性,dynamic,changlog

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

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

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

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

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

再谈 Flink 的 “动态表” 和 “流表二象性”,大数据专题,flink,动态表,流表二象性,dynamic,changlog

不过,这张图并没有上一张图严谨,主要的问题在于:没有说明左侧的”操作记录“流是右侧棋局变化的”因“还是”果“,如果是”因“,那左侧就是输入的数据流,右侧是对应的动态表,这时相当于上一张图中的 ”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,不会有任何流或对应的动态表产生,只有当一个持续查询启动时,整条流式链路才会创建并运转起来。下图能更好地体现“流”,“动态表”,“持续查询”三者之间的关系:

再谈 Flink 的 “动态表” 和 “流表二象性”,大数据专题,flink,动态表,流表二象性,dynamic,changlog

参考资料

https://www.confluent.io/blog/kafka-streams-tables-part-1-event-streaming/#stream-table-duality文章来源地址https://www.toymoban.com/news/detail-844110.html

到了这里,关于再谈 Flink 的 “动态表” 和 “流表二象性”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动态规划专题——背包问题

    🧑‍💻 文章作者:Iareges 🔗 博客主页:https://blog.csdn.net/raelum ⚠️ 转载请注明出处 本文主要介绍常见的四种背包问题,思维导图如下: 💡 现有 N N N 件物品和一个最多能承重 M M M 的背包,第 i i i 件物品的重量是 w i w_i w i ​ ,价值是 v i v_i v i ​ 。在背包能承受的范围内

    2024年02月03日
    浏览(42)
  • 【算法专题】动态规划之路径问题

    题目链接 - Leetcode -62.不同路径 Leetcode -62.不同路径 题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示

    2024年01月24日
    浏览(48)
  • 【马蹄集】第十六周——动态规划专题

    难度:钻石    时间限制:1秒    占用内存:128M 题目描述 给出一个长度为 n n n 的序列 A A A ,选出其中连续且非空的一段使得这段和最大。 格式 输入格式:第一行是一个整数,表示序列的长度 n n n ;      第二行有 n n n 个整数,第 i i i 个整数表示序列的第 i i

    2024年02月11日
    浏览(71)
  • 云计算:OVS 集群 使用 Geneve 流表

    目录  一、实验 1.环境 2.OVS 集群 使用 Geneve 流表 二、问题 1.VXLAN与Geneve区别 (1) 主机 表1 宿主机 主机 架构 软件 IP 网卡 备注 ovs_controller 控制端 karaf 0.7.3 192.168.204.63 1个NAT网卡 (204网段) 已部署 ovs_server01 服务端 OpenvSwitch      v2.5.1 192.168.204.61 1个NAT网卡 (204网段), 1个仅

    2024年04月27日
    浏览(28)
  • leetcode-打家劫舍专题系列(动态规划)

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动

    2024年04月14日
    浏览(45)
  • 【蓝桥杯C/C++】专题六:动态规划

    在这里插入图片描述 本专题将讲解 最难理解 的算法之一:动态规划。介绍动态规划的基本概念、算法原理以及应用场景。首先,我们将介绍动态规划的定义和特点,以及它与递归、贪心算法的区别。接着,我们将详细介绍动态规划的解题思路和算法流程,包括状态转移方程

    2024年02月01日
    浏览(49)
  • 【动态规划专栏】专题二:路径问题--------1.不同路径

    本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:动态规划专栏 🚚代码仓库:小小unicorn的代码仓库🚚

    2024年02月20日
    浏览(46)
  • 【动态规划专栏】专题二:路径问题--------6.地下城游戏

    本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:动态规划专栏 🚚代码仓库:小小unicorn的代码仓库🚚

    2024年02月22日
    浏览(60)
  • 表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

    目录 表白墙引入数据库  再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 1.先引入数据库的依赖(驱动包),5.1.49 pom.xml中,在之前的两个之前,再去添加一个 2.创建本地的数据库 3.之前的代码中有一段可以删掉了 这个代码需要删除,因为我们已

    2024年02月08日
    浏览(57)
  • 力扣 C++|一题多解之动态规划专题(2)

    简写为 DP,是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包