Flink 生态对 Confluent / Kafka Schema Registry 支持情况的研究报告

文章目录

  • 1. Flink CDC 对 Confluent Schema Registry 的支持情况
  • 2. Confluent Avro Format 对 Confluent Schema Registry 的支持情况
  • 3. 关键性结论

这几年,在流式链路上引入一个 Schema Registry 变得越来越流行,也越来越有必要, Schema Registry 能有效控制 Schema 的变更,合理管理 Schema Evolution,同时,引入它以后还能有效精简消息内容(特别是针对 Avro 格式),提升消息的传输效率,所以引入 Schema Registry 是有很多正向收益的。此外,还有一个非常基础但却很容易被忽视的作用:就是提供消息本身的 Schema,这一点在处理 CDC 数据时尤为重要,因为 CDC 数据虽然有统一的 Schema(例如 Debezium CDC),但它所包裹的 Payload 信息,也就是表中的实际数据其实已经丢失了类型信息,这就是为什么 Hudi 的 Deltastreamer 在处理 CDC 数据时强依赖一个 Schema Registry 的原因!

在 Kafka 生态中,目前最主流也是最成熟的 Schema Registry 实现应该是 Confluent 提供的 Confluent Schema Registry,有人也直接称其为 Kafka Schema Registry,我们看到围绕 Kafka 的周边生态组件在需要集成一个 Schema Registry 时基本上都会优先选择 Confluent / Kafka Schema Registry,典型案例就是 Apache Hudi 的 HoodieStreamer / HoodieDeltaStreamer 在从 Kafka 接入 Debezium CDC 消息写入 Hudi 表时,仅支持 Confluent Schema Registry 这一种 Schema Registry(截止目前)。

schema-registry-and-kafka

图1. Confluent Schema Registry 的工作原理

那在 Flink 生态中,对 Confluent Schema Registry 的支持度如何呢?本文,我们来详细地梳理和总结一下。在 Flink 生态中,与 Schema Registry 有关的组件主要是 Flink CDC 和 Confluent Avro Format ( format=debezium-avro-confluent ),下面展开介绍一下具体情况。

1. Flink CDC 对 Confluent Schema Registry 的支持情况


作为实时链路的起始点,如果要引入 Schema Registry 的话,那么在 CDC 数据在进入 Kafka 时就是一个非常重要的节点,因为这是链路的起始点,Debezium 消息的 Schema 应该在此时向 Schema Registry 进行注册,只有这样, Schema Registry 才能在数据进入 Kafka 前对于进行管控(根据 Schema Evolution 策略决定有可能发生了 Schema 变更的消息能不能进入到 Kafka 中),同时下游在解析这个消息时也需要从 Schema Registry 中拿到对应的 Schema 数据。

应该说,目前在摄取 CDC 数据进入 Kafka 的各类组件中,对 Confluent / Kafka Schema Registry 支持最好的无疑是 Kafka Connect,搭配上它的两个插件: Debezium MySQL Connector 和 Confluent Avro Converter,Kafka Connect 可以很好地将 MySQL CDC 数据实时摄取到 Kafka 的同时完成在 Confluent Schema Registry 上的消息格式注册。这也不难理解,因为它们背后都是由 Confluent 公司在支持和推动。关于 Kafka Connect + Confluent Schema Registry 摄取 Debezium CDC 数据的方案,请参考 《CDC 数据入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( Flink Connector ) 》和《CDC 数据入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》两套方案。

那 Flink CDC 呢?很遗憾,目前 Flink CDC 还没有集成 Confluent Schema Registry,不能做到在摄取 CDC 数据的同时自动向 Confluent Schema Registry 中注册消息格式!不过,对于 Flink 来说,还有一些回旋余地,就是在下游利用 connector=kafka, format=debezium-avro-confluent 动态表可以实现 Schema 的自动注册,这算是一种“补救”措施吧,不过,这种实现方式还是有一些不一样的,特别是在消息格式上,它注册的消息是不含 sourcets_mstransaction等字段的,具体请参考《Hudi HoodieStreamer 报错 A column or function parameter with name ts_ms cannot be resolved 解决方法》

2. Confluent Avro Format 对 Confluent Schema Registry 的支持情况


目前,Flink 生态中唯一支持与 Confluent Schema Registry 对接的组件是 Confluent Avro Format, 一张配置为 connector=kafka, format=debezium-avro-confluent 的动态表可以自动将消息格式注册的 Confluent Schema Registry 上。如果想看具体示例,可以参考《CDC 数据入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( Flink Connector ) 》和《CDC 数据入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》两套方案。但是,我们要注意 Confluent Avro Format 有不少局限性:

① Confluent Avro Format 只能应用于 Apache Kafka SQL connector 和 Upsert Kafka SQL Connector,这意味这:我们只能通过 Flink SQL 一张表一张表地去配置,不能通过 Flink API 批量地完成数据表的定义,也就无法在单一 Flink 作业整库 / 多表接入 Kafka 的方案中引入 Confluent Schema Registry。

② 配置为connector=kafka, format=debezium-avro-confluent 的动态表物化到 Kafka 里的数据是 Flink 的 changelog 数据,虽然它与标准 debezium 消息高度类似,但不是标准的 debezium 数据,它只含有after, op, before三个字段,无 sourcets_mstransaction等字段,注册到 Confluent Schema Registry 中注册的 schema 也只包含after, op, before三个字段,如果下游依旧是 Flink 生态(例如使用 Flink Hudi Connector 写入 Hudi 表),一般是不会有问题的,但如果下游是其他生态,例如,如果使用 HoodieStreamer / HoodieDeltaStreamer 处理的话,就会报错,因为数据格式匹配不上,HoodieStreamer / HoodieDeltaStreamer 处理的是标准的 debezium 格式的数据,这个问题具体可以参考《Hudi HoodieStreamer 报错 A column or function parameter with name ts_ms cannot be resolved 解决方法》

3. 关键性结论


如果要在 Flink 中使用 Confluent Schema Registry,最好整个链路都是 Flink 的生态,如果链路中混合了 Kafka Connect 或 HoodieStreamer / HoodieDeltaStreamer,会因链路上下游 debezium 数据格式的差异导致作业失败。目前在 CDC 数据入湖方向上,只有《CDC 数据入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( Flink Connector ) 》这一种完整链路是验证通过过,如果下游使用其他组件处理, 例如:HoodieStreamer / HoodieDeltaStreamer ,方案是跑不通的。


关联阅读

  • 《Flink CDC 整库 / 多表同步至 Kafka 方案(附源码)》
  • 《CDC 数据入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( Flink Connector ) 》
  • 《CDC 数据入湖方案:Kafka Connect > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》
  • 《CDC 数据入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( Flink Connector ) 》
  • 《CDC 数据入湖方案:Flink CDC > Kafka + Schema Registry > Hudi ( HoodieMultiTableStreamer ) 》
  • 《CDC 数据入湖方案:Flink CDC > Kafka > Hudi》

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

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

相关文章

信息化项目交付验收流程管理办法

项目交付验收流程制度 管理办法 (执行版) (文件编号: ) 编制: 审核: 批准: 版本: 生效日期: 管理办法概述 制定目的为了保证公司在建项目交付验收工作事项的顺利开展,保证交付验收进度及…

舵机(结构,原理,控制方法)

介绍 舵机,全称为伺服马达(Servo Motor),是一种能够精确控制角度或位置的电动机。它广泛应用于模型制作、机器人技术、工业自动化等领域。舵机通过接收控制信号,将其转化为机械运动,从而实现精确的控制。 …

211初试自命题复试线仅302分!延边大学计算机考研考情分析!

延边大学(Yanbian University),简称“延大”,地处吉林省延边朝鲜族自治州,是国家“双一流”建设高校、国家“211工程”重点建设大学、西部开发重点建设院校、吉林省人民政府和教育部共同重点支持建设大学、吉林省人民政…

pcd点云江湖之处处碰壁:点云文件pcd加载02

江湖好汉,休走,废了半天力气把threejs自带的代码搬迁到自己项目中了,高高兴兴给领导看。领导一句话,顿时无奈:领导曰:点云单色太丑,能不能按照分类展示? 一句话难道英雄好汉&#xf…

IT廉连看——UniApp——事件绑定

IT廉连看——UniApp——事件绑定 这是我们上节课最终的样式; 一、现在我有这样一个需求,当我点击“生在国旗下,长在春风里”它的颜色由红色变为蓝色,该怎么操作? 这时候我们需要一个事件的绑定,绑定一个单…

【webrtc】m98:Call的创建及Call对音频接收处理

call中多個流共享相同的辅助组件 这几个是与外部共用的 线程传输send控制module 线程任务队列工厂call的辅助组件中各种统计以及接收测的cc是自己创建的 call自己的多个辅助组件是外部传递来的 call 创建多个接收流 这里用一个set 来保存所有指针,并没有要map的意思:

debian nginx upsync consul 实现动态负载

1. consul 安装 wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_r…

本是梦中人,常作花下客。心中自往来,知我有几个。

我们总是喜欢拿“顺其自然”来敷衍人生道路上的荆棘坎坷,却很少承认,真正的顺其自然, 其实是竭尽所能之后的不强求, 而非两手一摊的不作为。 一花凋零荒芜不了整个春天, 一次挫折也荒废不了整个人生。 多年后&#x…

GQL 来了!ISO/IEC 正式发布 GQL 数据库国际标准!

历时四年筹备,超过20个国家的标准和技术专家参与制定,ISO/IEC GQL (图查询语言)标准于2024年4月12日正式发布! 作为国际标准化组织(ISO)继 1987年 发布SQL后,唯一发布的数据库查询语…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树) 接下来是名词解释: 权&a…

Vue 3 的 setup语法糖工作原理

前言 我们每天写vue3项目的时候都会使用setup语法糖,但是你有没有思考过下面几个问题。setup语法糖经过编译后是什么样子的?为什么在setup顶层定义的变量可以在template中可以直接使用?为什么import一个组件后就可以直接使用,无需…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图MySQL代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法,如果是直接查看使用的话可以只看这里! 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码…

SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池? 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…

C++中获取int最大与最小值(补)

上文中,我们学习了C中获取int最大与最小值的两种方法:C库和移位运算,这篇文章将解决在移位运算中遇到的各种报错,并提出一种新的生成int最值的方法 上文链接:http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…

2001-2022年全国31省份互联网发展47个指标合集各省电信业务信息化软件信息技术服务业

全国31省份互联网发展47个指标合集各省电信业务信息化软件信息技术服务业(2001-2022年)插值填补无缺失 整理了各省电信业务、从业人员、电信通信、互联网发展、企业信息化、软件和信息技术服务业等47个互联网主要发展指标,内含原始数据、线性…

用手机打印需要下载什么软件

在快节奏的现代生活中,打印需求无处不在,无论是工作文件、学习资料还是生活小贴士,都可能需要一纸呈现。然而,传统的打印方式往往受限于时间和地点,让人倍感不便。今天,就为大家推荐一款便捷又省钱的手机打…

C++小病毒

C小病毒&#xff08;注&#xff1a;对电脑无过大伤害&#xff09; 短短行&#xff0c;创造奇迹&#xff01; 把这个文件命名为virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…

人脸识别:基于卷积神经网络(CNN)分类思想的人脸识别系统

本文来自公众号 “AI大道理” —————— 项目配套视频课程&#xff1a; 平台&#xff1a;荔枝微课 链接&#xff1a;十方教育 项目地址&#xff1a;https://github.com/AIBigTruth/CNN_faces_recognition 之前很多人来询问这个项目怎么做&#xff0c;代码跑不起来&#…

【openlayers系统学习】1.1渲染GeoJSON,添加link交互

一、渲染GeoJSON 在进入编辑之前&#xff0c;我们将看一下使用矢量源和图层进行基本要素渲染。Workshop在 data​ 目录中包含一个 countries.json​ GeoJSON文件。我们首先加载该数据并将其渲染在地图上。 首先&#xff0c;编辑 index.html​ 以便向地图添加深色背景&#xf…

集合框框框地架

这一次来介绍一下常用的集合&#xff1a; 首先是两种集合的《家庭系谱图》&#xff1a; 接下来介绍一下集合的种类&#xff1a; Collection Set SetTreeSet&#xff1a;基于红⿊树实现&#xff0c;⽀持有序性操作&#xff0c;例如&#xff1a;根据⼀个范围查找元素的操作。但…