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

news2024/11/24 7:43:50

文章目录

  • 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.coloradmin.cn/o/1690029.html

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

相关文章

HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池芯片IC

一般描述 该HX6203是一个完整的电池充电器控制器的两个(8.4V)电池锂离子电池。HX6203为快速充电锂离子电池提供了一种小巧、简单、高效的解决方案。一个外部检测电阻以高精度设置充电电流。 内部电阻分压器和精密参考设置的最终浮动电压为8.4V时,输入…

宁盾与深信服发布联合方案,解决云桌面及微软AD完整替代

自 Citrix 退出中国市场后,不少中大型企业关心国产云桌面脱离微软 AD 域是否还能正常工作。在2024年3月初,宁盾身份目录与深信服桌面云完成兼容互认证,对于企业的疑问给出了官方回应。 5月10日,在深信服《Citrix离场背景下&#…

草图大师2024怎么保存低版本呢?插件怎么写?

草图大师是一款流行的绘图和设计软件,为了向后兼容,保存低版本文件时,可以采取以下步骤: su模型库 1.另存为旧版本格式: 在保存文件时,草图大师通常会提供一个选项,让你选择要保存的文件格式和…

plsql 学习

过程化编程语言 赋值:: ||:连接符号 dbms_output.put_line() :输出的语句 var_name ACCOUNTLIBRARY.USERNAME%type; 变量名;某个表的数据类型;赋值给变量名 用下面的方法更好用 异常exception 循…

Mixiy(米思齐)安装

Mixiy(米思齐)安装 官网地址:爱上米思齐 打开官网,选择下图的软件进行下载 复制提取码,点击链接跳转到网盘进行下载,选择(RC4完整版) 下载完成后,解压到合适的位置,进入文件夹,双击Mixly.exe即…

小程序的深层了解

一:wxss的全局样式和局部样式 写在文件上,第一个路径会执行全局和局部自带的wxss给wxml,会执行wxml,会执行json和js. 无论那个文件都会执行文件夹内的和外部的app.wxss,但是如果有一样的属性,则看属性的权重,权重一样,则设置局部样式. 二:全局配置 wx:key"写的是data内…

实操专区-第13周-课堂练习专区-折线图和阶梯图

实操专区-第13周-课堂练习专区-折线图和阶梯图 下载安装ECharts,完成如下样式图形。 代码和截图上传 基本要求:下图2选1,完成代码和截图 完成 3.1.3.12 折线图和阶梯图中的任务点 基本要求:2个选一个完成,多做1个加2分…

Linux网络——TCP协议详细讲解

目录 前言 一、TCP报头格式 1.首部长度 2.窗口大小 3.序号与确认序号 4.标志位 4.1 PSH 4.2 RST 5.紧急指针 6.TCP检验和 二、超时重传 三、连接管理机制 四、滑动窗口 五、拥塞控制 六、延迟应答 七、为什么TCP这么复杂? 前言 前面我们学习了TCP协议套接字的…

DFS:解决二叉树问题

文章目录 了解DFS1.计算布尔二叉树的值思路代码展示 2.求根节点到叶节点数字之和思路代码展示 3.二叉树剪枝思路代码展示 4.验证二叉搜索树思路分析代码展示 5.二叉搜索树中第k小元素思路:代码展示 6.二叉树的所有路径思路分析代码展示 总结 了解DFS 所谓DFS就是就…

编译qt5.15.2(mac/windows)的mysql驱动(附带编译好的文件)

文章目录 0 背景1 编译过程2 福利 0 背景 因为需要连接到mysql数据库,所以需要连mysql驱动。 1 编译过程 1,打开文件/Users/mac/Qt5.14.2/5.14.2/Src/qtbase/src/plugins/sqldrivers/sqldrivers.pro,注释掉QMAKE_USE mysql; 如…

宝藏网站推荐-封面图片生成器

封面图片生成器:封面图生成器 | 太空编程 (spacexcode.com)[https://spacexcode.com/coverview] 由来 最近爱上了写文案,在网上冲浪的时候发现一个宝藏网站。Spacecode,一个大神维护的个人网站,含有前端知识库、个人博客及他做…

【设计模式】JAVA Design Patterns——Commander(指挥官模式)

🔍目的 用于处理执行分布式事务时可能遇到的所有问题。 🔍解释 处理分布式事务很棘手,但如果我们不仔细处理,可能会带来不想要的后果。假设我们有一个电子商务网站,它有一个支付微服务和一个运输微服务。如果当前运输…

基于jeecgboot-vue3的Flowable增加表单功能(三)

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 接上一节 10、新建表单,打开VForm3编辑页面 /*** 新增事件*/function handleAdd() {designer.open true;nextTick(() > {reset();vfDesignerRef.value.clearDesigner();}…

R实验 基础(四)

实验目的: 掌握R对数据文件的读、写操作;了解R基础包中的数据集及相关的操作。 实验内容: 读取纯文本文件。在R语言基础包中,有两个函数可以使用: read.table()函数(包括read.csv()函数) 只…

【html】网页布局模板01---简谱风

模板效果: 这是一种最简单,最干净的一种网页布局。 模板介绍: 模板概述: 这个模板是一个基础的网页布局模板,包括一个头部区域(header),其中包含网站标题(logo)和导航菜单(nav),以及一个页脚区域(copy),用于显示版权信息。整体布局简洁明了,适合作为各种类…

TypeScript-搭建编译环境

搭建编译环境 TypeScript 编写的代码是无法直接在js引擎( 浏览器 / Nodejs )中运行的,最终还需要经过编译成js代码才可以正常运行 搭建手动编译环境 1️⃣ 全局安装 typescript 包(编译引擎) -> 注册 tsc 命令 npm i -g typescript 2…

Julia编程01:Julia语言介绍

在2020上半年,因为疫情无法返校,所以在家待了半年,期间学习一点了R语言、Python、Julia、linux和C语言,只是学习基础语法并没有项目练习,因此返校半年后差不多都不记得了,现在重新捡起Julia丰富下当时写的笔…

MyBatis实用方案,如何使项目兼容多种数据库

系列文章目录 MyBatis缓存原理 Mybatis plugin 的使用及原理 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态Sql标签解析 Mybatis的CachingExecutor与二级缓存 使用MybatisPlus还是MyBaits ,开发者应该如何选择? 巧…

民国漫画杂志《时代漫画》第21期.PDF

时代漫画21.PDF: https://url03.ctfile.com/f/1779803-1248634754-017e2b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

YOLOv8改进 | 图像去噪篇 | 单阶段盲真实图像去噪网络RIDNet辅助YOLOv8图像去噪(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是单阶段盲真实图像去噪网络RIDNet,RIDNet(Real Image Denoising with Feature Attention)是一个用于真实图像去噪的卷积神经网络(CNN),旨在解决现有去噪方法在处理真实噪声图像时性能受限的问题。通过单阶段结构和特征注意机制,…