继上篇文章提到了如何在应用层来通过编写yaml文件远程提交到flink集群来跑文章之后,作者开始重点研究了下目前已经支持的Flink CDC的yaml pipeline 形式的内容 source&sink。
01.
YAML优势
👍 1.1、YAML vs SQL
数据摄入YAML作业和SQL作业在数据传递过程中使用不同的数据类型:
-
SQL传递RowData,YAML传递DataChangeEvent和SchemaChangeEvent。SQL的每个RowData都有自己的变更类型,主要有4种类型:insert(+I),update before(-U),update after(+U)和delete(-D)。
-
YAML使用SchemaChangeEvent传递Schema变更信息,例如创建表,添加列、清空表等,DataChangeEvent用来传递数据变更,主要是insert,update和delete,update消息中同时包含了update before和update after的内容,这使得您能够写入原始变更数据到目标端。
数据摄入YAML作业相比SQL作业的优势如下:
数据摄入YAML |
SQL |
自动识别Schema,支持整库同步 |
需要人工写Create Table和Insert语句 |
支持多策略的Schema变更 |
不支持Schema变更 |
支持原始Changelog同步 |
破坏原始Changelog结构 |
支持读写多个表 |
读写单个表 |
相对于CTAS或CDAS语句,YAML作业功能也更为强大,可以支持:
-
上游表结构变更立即同步,不用等新数据写入触发。
-
支持原始Changelog同步,Update消息不拆分。
-
同步更多类型的Schema变更,例如Truncate Table和Drop Table等变更。
-
支持指定表的映射关系,灵活定义目标端表名。
-
支持灵活的Schema Evolution行为,用户可配置。
-
支持WHERE条件过滤数据。
-
支持裁剪字段。
👍 1.2、YAML vs DataStream
数据摄入YAML作业相比DataStream作业的优势如下:
数据摄入YAML |
DataStream |
为各级别用户设计,不只是专家 |
需要熟悉Java和分布式系统 |
隐藏底层细节,便于开发 |
需要熟悉Flink框架 |
YAML格式容易理解和学习 |
需要了解Maven等工具管理相关依赖 |