Debezium SchemaNameAdjuster 分析
Debezium SchemaNameAdjuster 分析
目录
- 1. 概述
- 2. 核心功能
- 3. 实现原理
- 4. 应用场景
- 5. 扩展示例
- 6. 总结
1. 概述
SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创建相应的 Avro Schema,而这些名称必须符合 Avro 的命名规则。
2. 核心功能
-
名称校验:
- 检查 Schema 名称是否符合 Avro 命名规范
- 验证首字符和非首字符的合法性
-
名称调整:
- 将不合法字符替换为合法字符(默认使用下划线’_')
- 保持名称的语义性和可读性
-
冲突处理:
- 检测并处理名称冲突
- 支持自定义冲突处理策略
3. 实现原理
3.1 核心接口
public interface SchemaNameAdjuster {/*** 调整提议的名称使其符合 Avro 命名规范*/String adjust(String proposedName);
}
3.2 名称验证规则
- 首字符规则:
public static boolean isValidFullnameFirstCharacter(char c) {return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_';
}
- 非首字符规则:
public static boolean isValidFullnameNonFirstCharacter(char c) {return c == '.' || isValidFullnameFirstCharacter(c) || (c >= '0' && c <= '9');
}
3.3 调整策略
- 默认策略:
SchemaNameAdjuster adjuster = SchemaNameAdjuster.create("_", (original, replacement, conflict) -> {LOGGER.warn("Schema name '{}' is invalid, using '{}' instead", original, replacement);
});
- 自定义替换:
SchemaNameAdjuster customAdjuster = SchemaNameAdjuster.create(c -> c == '-' ? "_" : String.valueOf(c),(original, replacement, conflict) -> {// 自定义冲突处理逻辑}
);
4. 应用场景
4.1 表 Schema 构建
在构建数据库表的 Schema 时,需要为 Value Schema 和 Key Schema 生成合法的 Avro 名称:
SchemaBuilder valSchemaBuilder = SchemaBuilder.struct().name(schemaNameAdjuster.adjust(schemaNamePrefix + ".Value"));
SchemaBuilder keySchemaBuilder = SchemaBuilder.struct().name(schemaNameAdjuster.adjust(schemaNamePrefix + ".Key"));
4.2 CloudEvents 格式转换
在将 Debezium 事件转换为 CloudEvents 格式时,需要调整 Schema 名称:
CESchemaBuilder ceSchemaBuilder = defineSchema().withName(schemaNameAdjuster.adjust(maker.ceEnvelopeSchemaName()))
4.3 逻辑表路由
在进行逻辑表路由时,需要为新的目标主题生成合法的 Schema 名称:
valueBuilder.name(schemaNameAdjuster.adjust(newTopicName + ".Value"));
4.4 心跳机制
在配置心跳机制时,需要确保心跳消息的 Schema 名称符合规范:
return new HeartbeatImpl(interval,topic,logicalName,schemaNameAdjuster);
4.5 基本用例
- 表名转换:
String tableName = "my-table";
String adjustedName = adjuster.adjust(tableName); // 结果: "my_table"
- 复杂Schema名称:
String complexName = "com.example.my-schema.v2";
String adjusted = adjuster.adjust(complexName); // 结果: "com.example.my_schema.v2"
- 特殊字符处理:
String specialChars = "table$name@2.0";
String adjusted = adjuster.adjust(specialChars); // 结果: "table_name_2.0"
4.6 具体Schema生成示例
让我们以一个具体的表结构为例,展示 SchemaNameAdjuster 如何处理 Schema 名称:
-- 原始表结构
CREATE TABLE inventory.products (id INT PRIMARY KEY,name VARCHAR(255),description TEXT,weight DECIMAL(5,相关文章:
Debezium SchemaNameAdjuster 分析
Debezium SchemaNameAdjuster 分析 目录 1. 概述2. 核心功能3. 实现原理4. 应用场景5. 扩展示例6. 总结1. 概述 SchemaNameAdjuster 是 Debezium 中的一个工具类,主要用于确保 Schema 名称符合 Avro 命名规范。在数据库变更事件被转换为 Kafka 消息时,需要为每个表和字段创…...
Stable Diffusion绘画 | SDXL模型使用注意事项
注意事项 SDXL模型的使用,对电脑配置要求更高,需要 8GB 以上显存的显卡SDXL模型兼容性不太好,容易出现错误,对 Mac 电脑不友好只能选择 SDXL模型 训练的 LoRA 使用不能使用旧的 VAE文件 SDXL 专用 VAE 文件:sdxl_vae.…...
(五)机器学习 - 数据分布
数据分布(Data Distribution)是指数据在不同值或值区间内的分布情况,它描述了数据点在整个数据集中是如何分散或集中的。数据分布可以通过多种方式来分析和表示,包括图形和数值方法。 常见的数据分布特征和描述数据分布的方法&…...
Flink State面试题和参考答案-(上)
什么是 Flink 中的状态(State)? Flink 中的状态是指在 Flink 流处理程序中,操作符或函数用于存储和访问数据的机制。状态可以看作是在事件流处理过程中,随着时间推移而累积或变更的数据集合。在 Flink 的有状态流处理…...
利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像
概述 论文地址:https://studios.disneyresearch.com/app/uploads/2024/09/Lossy-Image-Compression-with-Foundation-Diffusion-Models-Paper.pdf 迪士尼的研究部门正在提供一种新的图像压缩方法,利用开源Stable Diffusion V1.2 模型,以比竞…...
QT信号与槽机制详解
当信号发出后,被连接的槽函数会自动被回调,类似观察者模式,当发生了感兴趣的事件,某一个操作就会被自动触发。信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时Qt对应的窗…...
openGauss开源数据库实战二十二
文章目录 任务二十二 使用JDBC访问openGauss数据库任务目标实施步骤一、查看和设置隔离级别1.查看系统默认的隔离级别2.设置系统默认的隔离级别3.查看当前会话的隔离级别4.设置当前会话的隔离级别5.设置当前事务的隔离级别 二、读提交隔离级别测试三、可重复读隔离级别测试 任务…...
BurpSuite解决暴力破解时需要验证码问题
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。 笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。 安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博&a…...
WPF Combox使用 Text无法选择正确获取CHange后的Text
使用固定ComboxItem 无法通过 selectitem as object 来进行回去到 Content内的对香数据。那我只能这个样干: private void CBPaiweiLeixingSelect_Change(object sender, SelectionChangedEventArgs e){ ComboBox ThisBox sender as ComboBox;List<EDaxiaosuixi…...
【速览】设计模式(更新中)
目录 模式的历史设计模式是什么设计原则 SOLID1. 单一职责原则(Single Responsibility Principle, SRP)2. 开闭原则(Open/Closed Principle, OCP)3. 里氏替换原则(Liskov Substitution Principle, LSP)4. 接…...
【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI
前言 主要功能 文生图、图生图、图像修复、处理、合成 所有的AI设计工具,安装包、模型和插件,都已经整理好了,👇获取~ 系统要求 windows 10、11系统,建议6G显存,NVIDIA显卡推荐12G显存,内存建…...
县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格
在一二线城市都在欢呼10月份、11月份成交量回升,楼价回稳的时候,广东一些县城却先顶不住了,大举降价,显示出县城楼市房价率先回归月薪一平方的合理水平,这将对全国楼市产生巨大影响。 据了解这个县城的楼价此前较为稳定…...
计算机组成原理(七):二进制编码
二进制编码 二进制系统 二进制由两个数字 0 和 1 组成,适合数字电路中的高电平(1)和低电平(0)表示。在计算机内部,所有数据(如数字、文本、图像、声音等)最终都以二进制形式存储和…...
【GitHub分享】you-get项目
【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五,卸载 如果大家想要更具体地操作可去开源网站查看手册,这里只是一些简单介绍,但是也够用一般,有什么问题,也可以留言。 一、介绍 you-get是一…...
论文概览 |《Sustainable Cities and Society》2024.12 Vol.116
本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要,一共包括52篇SCI论文! 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...
解决node.js的req.body为空的问题
从昨晚一直在试,明明之前用的封装的axios发送请求给其他的后端(springboot)是可以的,但昨天用了新项目的后端(node.js)就不行。 之前用了代理,所以浏览器发送的post请求不会被拦截,…...
Mysql学习笔记之安装
“工欲善其事,必先利其器”,这篇文章我们主要介绍Msql的安装方法。 1. 通过Docker方式安装Mysql 通过dock可以很方便的安装mysql,可以通过图形化界面配置各种参数,简介明了推荐使用dock方式安装,当然也可以使用命令方…...
将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)
将PDF流转为图片展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上,然后将 canvas 转为图片 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 ArrayBuffer…...
【深度学习】 零基础介绍卷积神经网络(CNN)
零基础介绍 卷积神经网络(CNN,Convolutional Neural Network)是深度学习中的一种神经网络,特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务,比如判断一张照片中是猫还是狗。下面用一…...
Coze概述
### Coze概述 Coze(中文名为扣子)是由字节跳动开发的一个新一代AI应用开发平台,旨在让用户轻松创建各种AI驱动的应用和聊天机器人,无论用户的编程经验如何。以下是Coze的一些关键特性和功能: #### 关键特性 - **无代…...
为什么92%的Lovable新手在第5小时放弃?——资深架构师拆解3个致命认知盲区
更多请点击: https://codechina.net 第一章:Lovable应用开发入门与环境搭建 Lovable 是一个面向现代 Web 应用的轻量级全栈框架,专为快速构建可维护、可扩展且富有表现力的交互式应用而设计。它融合了声明式 UI、响应式状态管理与内置服务抽…...
【BUUCTF】【WEB】Unicorn shop
考点:Unicode数字字符,python的int()函数打开题目,发现这个页面很像买东西的网站,一共有四个商品,每个商品的价格不一样,但是第4个的商品最贵,而且超出了其他商品特别多,由此合理猜测…...
快如闪电!超越人类反应极限!
在工业控制以及航空航天等核心场景,极速启动就是高可靠系统的生命线。0.2毫秒超快启动搭配硬件看门狗,让设备在掉电重启、异常恢复时瞬时归位,关键任务永不延误! https://www.bilibili.com/video/BV1yvLs6JEJa/?spm_id_from333.1…...
Markdown怎么转换成txt?5种方法+在线工具对比2026最全指南
在日常工作中,Markdown格式的文件越来越常见,但有时候我们需要将其转换为纯文本格式来适应不同的应用场景。本文将为你详细介绍md转txt的多种方法,包括本地转换、在线工具、编程方案等,帮助你快速找到最适合的解决方案。为什么需要…...
靠谱的江西靠谱单招机构哪家靠谱
每年单招报名前后,总有不少家长和同学跑来问我:“江西到底哪家单招机构靠谱?”说实话,这个问题没有标准答案,但如果你愿意听点实在的,我可以分享一下这几年自己观察到的和从往届学员那里听到的信息。为什么…...
动手实验:在QEMU上模拟调试ATF安全启动全流程(含常见错误排查)
在QEMU虚拟环境中实战调试ATF安全启动全流程指南 1. 实验环境搭建与工具链配置 构建ATF调试环境需要精心准备工具链和依赖组件。我们推荐使用Ubuntu 20.04 LTS作为基础系统,这是目前对ARM虚拟化支持最完善的Linux发行版之一。以下是关键组件的版本要求: …...
如何用Win11Debloat免费为Windows系统瘦身:终极优化指南
如何用Win11Debloat免费为Windows系统瘦身:终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...
3个真实场景解密:如何用btcrecover找回遗忘的比特币钱包密码
3个真实场景解密:如何用btcrecover找回遗忘的比特币钱包密码 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance in try…...
Jetson Nano B01 新手避坑:用i2c-tools命令行搞定MPU6050陀螺仪数据读取
Jetson Nano B01 新手避坑指南:用i2c-tools命令行搞定MPU6050陀螺仪数据读取 刚拿到Jetson Nano和MPU6050模块的新手开发者,往往会被图形界面和Python编程的复杂度吓退。其实,借助Linux系统内置的i2c-tools工具包,完全可以通过纯…...
如何高效实现STL到STEP格式转换?专业工具stltostp实战指南
如何高效实现STL到STEP格式转换?专业工具stltostp实战指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾遇到这样的困境:精心设计的3D模型在STL格式下无法导入…...
