Debezium日常分享系列之:Debezium 2.3.0.Final发布
Debezium日常分享系列之:Debezium 2.3.0.Final发布
- 一、重大改变
- 二、PostgreSQL / MySQL 安全连接更改
- 三、JDBC 存储编码更改
- 四、新功能和改进
- 五、Kubernetes 的 Debezium Server Operator
- 六、新的通知子系统
- 七、新的可扩展信号子系统
- 八、JMX 信号和通知集成
- 九、新的 JDBC 存储子系统
- 十、PostgreSQL 流式传输的恰好一次传送
- 十一、PostgreSQL 副本身份更改
- 十二、Oracle RAC 改进
一、重大改变
通常会尝试尽可能避免次要版本中的重大更改,但不幸的是,有时此类更改是不可避免的,特别是如果某个功能可能是作为实验性引入的。 Debezium 2.3 引入了两项重大更改:
- PostgreSQL / MySQL 安全连接更改
- JDBC 存储编码更改
二、PostgreSQL / MySQL 安全连接更改
- Debezium for PostgreSQL 和 MySQL 可以配置为使用安全的 SSL 连接。对于 PostgreSQL,这可以通过配置database.sslmode 来完成,而对于MySQL,这可以通过database.ssl.mode 来完成。
- 在 Debezium 2.3 中,此配置选项不再默认为禁用 (PostgreSQL) 或禁用 (MySQL),而是默认为首选 (PostgreSQL) 和首选 (MySQL)。这意味着,当尝试使用加密的安全连接进行连接不可用时,连接器将默认使用不安全的连接,除非另有配置。
三、JDBC 存储编码更改
- Debezium 2.3.0.alpha1 引入了新的实验性 JDBC 存储模块。该存储模块默认使用UTF-16作为默认编码;但是,大多数数据库更喜欢将 UTF-8 作为默认值。如果您从 Debezium 2.3.0.Alpha1 升级,则 Debezium 2.3.0.Beta1 及更高版本现在在使用 JDBC 存储模块存储数据时使用 UTF-8,以与典型数据库默认值保持一致。
四、新功能和改进
Debezium 2.3 包含大量新功能改进,其中包括:
- Kubernetes 的 Debezium Server Operator
- 新的通知子系统
- 具有新通道的新型可扩展信号子系统
- JMX 信号和通知集成
- 新的 JDBC 存储模块
- PostgreSQL 流式传输的恰好一次传送
- PostgreSQL 副本身份更改
- Oracle RAC 改进
五、Kubernetes 的 Debezium Server Operator
- 此版本引入了新 Debezium Operator 的预览版本,提供了在 Kubernetes 中部署和管理 Debezium Server 实例的能力。 Debezium Server 允许您将更改事件从数据源流式传输到各种消息传递基础设施。我们的目标是为希望利用 Kubernetes 实现可扩展性和高可用性部署的 Debezium 社区提供一种无 Kafka 的替代方案。
- 目前,由于运营商处于早期孵化阶段,相关文档很少;然而,我们确实打算在即将到来的发布周期中对此进行改进。您可以在 github 存储库中找到自定义资源规范的部署示例和基本描述,您可以将其用作短期参考。
- 我们目前不建议将此组件进行生产部署;但是,我们鼓励用户提供社区反馈。这些反馈对于评估组件是否已准备好功能或是否仍有需要改进的地方来满足每个人的需求非常有价值。
六、新的通知子系统
- Debezium 2.3 引入了一个名为通知的全新功能,允许 Debezium 发出可供任何外部系统使用的事件,以了解 Debezium 生命周期各个阶段的状态。
- 通知事件表示为一系列键/值元组,其结构包含多个开箱即用的字段。以下是一个简单通知事件的示例。
通知事件示例
{"id": "c485ccc3-16ff-47cc-b4e8-b56a57c3bad2","aggregate_type": "Snapshot","type": "Started","additional_data": {...}
}
每个通知事件由一个 id 字段、一个用于标识通知的 UUID、一个基于域驱动设计概念与通知相关的aggregate_type 字段、一个用于提供有关聚合类型本身的更多详细信息的 type 字段组成,以及一个可选的 extra_data 字段,该字段由基于字符串的键/值对的映射以及有关事件的附加信息组成。
目前 Debezium 支持两种通知事件类型:
- 初始快照的状态
- 增量快照监控
初始快照通知:
初始快照是连接器首次启动时对现有数据的一致捕获。初始快照事件将具有值为“初始快照”的聚合类型,并且事件类型将由三个逻辑值之一组成:
- SKIPPED:代表初始快照被跳过
- ABORTED:表示初始快照已中止。
- COMPLETED:表示初始快照已成功结束。
以下是有关初始快照完成的通知示例:
快照完成事件示例
{"id": "5563ae14-49f8-4579-9641-c1bbc2d76f99","aggregate_type": "Initial Snapshot","type": "COMPLETED"
}
增量快照通知:
增量快照是在连接器主动传输更改时从一组配置的表中捕获现有数据。增量快照事件将具有值为“增量快照”的聚合类型,并且该类型将由以下几个逻辑值之一组成:
- STARTED:表示增量快照已经开始
- PAUSED:表示增量快照已暂时暂停。
- RESUMED:表示已暂停的增量快照现已恢复。
- STOPPED:表示增量快照已停止。
- IN_PROGRESS:指示增量快照正在进行中。
- TABLE_SCAN_COMPLETED:指示给定表的增量快照已结束。
- COMPLETED:表示所有表的增量快照已结束。
配置通知:
Debezium 通知是通过连接器的配置进行配置的。以下示例展示了如何配置开箱即用的基于 Kafka 主题或日志的通道。
使用 Kafka 主题
{"notification.enable.channels": "sink","notification.sink.topic.name": "debezium_notifications",...
}
使用连接器日志
{"notification.enable.channels": "log"
}
七、新的可扩展信号子系统
自 Debezium 1.x 中引入增量快照功能以来,Debezium 就支持信号的概念。信号很重要,因为它允许您提供元数据来指示 Debezium 执行给定任务,无论该任务是向连接器日志写入条目还是执行临时增量快照。
在 Debezium 2.3 中,信号子系统经过重新设计,引入了称为通道的概念,它代表 Debezium 观察或收听信号并对信号做出反应的媒介。在以前的版本中,有一个跨连接器普遍支持的通道,即数据库信号表。在此版本中,这些渠道已统一,并且以下内容可供开箱即用:
- 数据库信号表
- Kafka信号主题
- 文件系统
- JMX
但这还不是全部,信号通道合约是可扩展的,允许您编写自定义实现并轻松地将其提供给您的连接器。
八、JMX 信号和通知集成
Debezium 2.3 之前引入了新的信号通道和通知功能。此功能允许外部应用程序轻松与 Debezium 集成,发送信号来执行各种任务(例如临时增量快照),并接收有关此类任务进度的通知。此版本建立在该功能之上,允许通过 JMX 发送信号和接收通知。
发送信号
在此版本中,信号通道子系统已得到改进,支持通过 JMX 发送信号。从 jconsole 窗口中,您现在可以看到连接器有两个新的小部分,即通知和信号部分,如下所示:
新的信号部分允许您调用 JMX bean 上的操作,以便将信号传输到 Debezium。该信号类似于逻辑信号表结构,它接受 3 个参数:唯一标识符、信号类型,最后是信号有效负载。下面说明了 jconsole 中的情况:
接收通知
新的通知部分允许您接收来自 Debezium 的 JMX bean 捕获的通知并做出反应。 Debezium JMX bean 将缓冲所有通知以确保不会错过任何通知。下面说明了 jconsole 中的情况:
JMX bean 不会自动清除通知队列。为了避免内存问题,请务必在处理完所有通知后调用通知 bean 上的重置方法。
九、新的 JDBC 存储子系统
Debezium 2.3 引入了一种新的存储模块实现,支持通过 JDBC 在数据存储中持久保存模式历史记录和偏移数据。对于您可能无法轻松访问持久文件系统的环境,这提供了另一种通过远程持久存储平台进行存储的替代方案。
为了利用这个新模块,必须将以下依赖项添加到您的项目或应用程序中:
Maven coordinates
<dependency><groupId>io.debezium</groupId><artifactId>debezium-storage-jdbc</artifactId><version>2.3.0.Final</version>
</dependency>
以下示例展示了如何通过 JDBC 存储模块配置偏移量或架构历史记录存储:
Offset JDBC 存储配置示例
{"offset.storage.jdbc.url": "<jdbc-connection-url>","offset.storage.jdbc.user": "dbuser","offset.storage.jdbc.password": "secret","offset.storage.jdbc.offset_table_name": "debezium_offset_storage"
}
架构历史 JDBC 存储的配置示例
{"schema.history.internal.jdbc.url": "<jdbc-connection-url>","schema.history.internal.jdbc.user": "dbuser","schema.history.internal.jdbc.password": "secret","schema.history.internal.jdbc.schema.history.table.name": "debezium_database_history"
}
十、PostgreSQL 流式传输的恰好一次传送
Debezium 传统上是一种至少一次交付解决方案,保证不会错过任何更改。 Exactly-Once 是 Apache Kafka 社区提出的一项提案,作为 KIP-618 的一部分。该提案旨在解决生产者(源连接器)的常见问题,当生产者重试时,它可能会重新向 Kafka 代理发送一批事件,即使该批次已经由代理提交。这意味着在某些情况下可能会发送重复的事件,并且并非每个消费者(接收器连接器)都能够轻松处理此类情况。
Debezium 计划以分阶段的方式推出一次性交付语义。快照和流媒体存在一些特定的极端情况,这些情况可能因连接器而异。就这样,Debezium 2.3 首先专门只在 PostgreSQL 的流阶段添加对一次语义的支持!
为了利用一次性交付,无需更改连接器配置;但是,您的 Kafka Connect 工作线程配置需要调整才能启用此功能。
如果您在同一个连接集群上混合支持和不支持精确一次传送的连接器,则您将无法在工作配置中将正好.once.support 设置为 required,因为这将导致不支持此功能的连接器启动时验证失败。
十一、PostgreSQL 副本身份更改
Debezium 2.3 引入了一个新的 PostgreSQL 连接器功能,称为“自动设置副本身份”。
副本身份是 PostgreSQL 识别在数据库事务日志中捕获哪些列以进行插入、更新和删除的方法。这项新功能允许通过连接器配置来配置表的副本身份,并在启动时将设置此配置的责任委托给连接器。
新的配置选项replica.identity.autoset.values指定以逗号分隔的表和副本身份元组列表。如果表已经具有给定的副本标识,则该标识将被覆盖以匹配此配置中指定的内容(如果包含该表)。 PostgreSQL 支持多种副本身份类型。
指定replica.identity.autoset.values时,该值是一个以逗号分隔的值列表,其中每个元素使用<完全限定表名称>:<副本身份>的格式。下面显示了一个示例,其中两个表配置为具有完整副本标识:
{"replica.identity.autoset.values": "public.table1:FULL,public.table2:FULL"
}
十二、Oracle RAC 改进
连接到 Oracle RAC 安装时,您必须指定 rac.nodes 配置属性,其中至少包含集群中所有单个节点的主机或 IP 地址。旧版本的连接器还支持多种格式,允许为每个节点包含一个端口,因为并非集群上的每个节点都可以使用相同的端口。
Debezium 2.3 还承认每个节点不一定使用相同的 Oracle 站点标识符 (SID),从而改进了 Oracle RAC 支持,因此,SID 现在也可以包含在 rac.nodes 配置属性中以支持此类安装。
以下示例说明了连接到两个 Oracle RAC 节点,每个节点使用不同的端口和 SID 参数:
配置示例
{"connector.class": "io.debezium.connector.oracle.OracleConnector","rac.nodes": "host1.domain.com:1521/ORCLSID1,host2.domain.com:1522/ORCLSID2",...
}
相关文章:

Debezium日常分享系列之:Debezium 2.3.0.Final发布
Debezium日常分享系列之:Debezium 2.3.0.Final发布 一、重大改变二、PostgreSQL / MySQL 安全连接更改三、JDBC 存储编码更改四、新功能和改进五、Kubernetes 的 Debezium Server Operator六、新的通知子系统七、新的可扩展信号子系统八、JMX 信号和通知集成九、新的…...
js为什么是单线程?
基础 js为什么是单线程? 多线程问题 类比操作系统,多线程问题有: 单一资源多线程抢占,引起死锁问题;线程间同步数据问题; 总结 为了简单: 更简单的dom渲染。js可以操控dom,而一…...

centos安装redis教程
centos安装redis教程 安装的版本为centos7.9下的redis3.2.100版本 1.下载地址 Index of /releases/ 使用xftp将redis传上去。 2.解压 tar -zxvf 文件名.tar.gz 3.安装 首先,确保系统已经安装了GCC编译器和make工具。可以使用以下命令进行安装: sudo y…...

把短信验证码储存在Redis
校验短信验证码 接着上一篇博客https://blog.csdn.net/qq_42981638/article/details/94656441,成功实现可以发送短信验证码之后,一般可以把验证码存放在redis中,并且设置存放时间,一般短信验证码都是1分钟或者90s过期,…...

【已编译资料】基于正点原子alpha开发板的第三篇系统移植
系统移植的三大步骤如下: 系统uboot移植系统linux移植系统rootfs制作 一言难尽,踩了不少坑,当时只是想学习驱动开发,发现必须要将第三篇系统移植弄好才可以学习后面驱动,现将移植好的文件分享出来: 仓库&…...

地下城堡3魂之诗食谱,地下城堡3菜谱37种
地下城堡3魂之诗食谱大全,让你解锁制作各种美食的方法!不同的食材搭配不同的配方制作,食物效果和失效也迥异。但有时候我们可能会不知道如何制作这些食物,下面为您介绍地下城堡3菜谱37种。 关注【娱乐天梯】,获取内部福…...

HDMI 基于 4 层 PCB 的布线指南
HDMI 基于 4 层 PCB 的布线指南 简介 HDMI 规范文件里面规定其差分线阻抗要求控制在 100Ω 15%,其中 Rev.1.3a 里面规定相对放宽了一些,容忍阻抗失控在 100Ω 25%范围内,不要超过 250ps。 通常,在 PCB 设计时,注意控…...
理解Go中的布尔逻辑
布尔数据类型(bool)可以是两个值之一,true或false。布尔值在编程中用于比较和控制程序流程。 布尔值表示与数学逻辑分支相关的真值,它指示计算机科学中的算法。布尔(Boolean)一词以数学家乔治布尔(George Boole)命名,总是以大写字母B开头。 …...

rv1126-rknpu-v1.7.3添加opencv库
rv1126所使用的rknn sdk里默认是不带opencv库的,官方所用的例程里也没有使用opencv,但是这样在进行图像处理的时候有点麻烦了,这里有两种办法: 一是先用python将所需要的图片处理好后在转化为bin格式文件,在使用c或c进行读取&…...

【Redis】Redis持久化深度解析
原创不易,注重版权。转载请注明原作者和原文链接 文章目录 Redis持久化介绍RDB原理Fork函数与写时复制关于写时复制的思考 RDB相关配置 AOF原理AOF持久化配置AOF文件解读AOF文件修复AOF重写AOF缓冲区与AOF重写缓存区AOF缓冲区可以替代AOF重写缓冲区吗AOF相关配置写后…...

c/c++--字节对齐(byte alignment)
1. 默认字节对齐 在所有结构体成员的字节长度都没有超出操作系统基本字节单位(32位操作系统是4,64位操作系统是8)的情况下 按照结构体中字节最大的变量长度来对齐;若结构体中某个变量字节超出操作系统基本字节单位 那么就按照系统字节单位来对齐。 注意࿱…...

算法进阶——字符串的排列
题目 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数据范围:n<10 要求:空间复…...
js中 slice 用法用法全解析
slice 工作原理 在深入研究一些更高级的用法之前,让我们看一下 slice 方法的基础知识。如MDN文档, slice 是数组上的一个方法,它最多有两个参数: arr.slice([begin[, end]]) begin 从该索引处开始提取原数组中的元素,如果该参数为负数&am…...

Typora安装教程
Typora 安装教程 安装 官网最新版 自行官网下载 社区版(老版本,附带激活码) 链接: https://pan.baidu.com/s/1t_3o3Xi7x09_8G1jpQYIvg?pwdmeyf 提取码: meyf 复制这段内容后打开百度网盘手机App,操作更方便哦 将百度云盘下…...
Pytorch中张量的维度扩张与广播操作示例
广播操作允许你对不同形状的张量执行逐元素操作,而无需显式循环。 一个关于分子坐标离散格点化的实战例子: def cdists(mols, grid):Calculates the pairwise Euclidean distances between a set of molecules and a listof positions on a grid (uses…...

身份证号码,格式校验:@IdCard(自定义注解)
目标 自定义一个用于校验 身份证号码 格式的注解IdCard,能够和现有的 Validation 兼容,使用方式和其他校验注解保持一致(使用 Valid 注解接口参数)。 校验逻辑 有效格式 符合国家标准。 公民身份号码按照GB11643-…...
【Java】instanceof 关键字
instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例。 如果 object 是class 的一个实例,则 instanceof 运算符返回 true,如果 object 不是指定类的一个实例,或者object 是null, 则返回…...
Android 13.0 recovery出厂时正在清理字体大小的修改
1.前言 在13.0的系统rom定制化开发中,在系统中recovery模块也是系统中比较重要的模块,比如恢复出厂设置,recovery ota升级,清理缓存等等, 在一些1080p的设备,但是density只是240这样的设备,会在恢复出厂设置的时候,显示的字体有点小,产品要求需要将正在清理的字体调大…...

京东商品数据:8月京东环境电器行业数据分析
8月份,环境电器大盘市场整体下滑。鲸参谋数据显示,8月京东平台环境电器的大盘将近570万,环比下滑约29%,同比下滑约10%;销售额为25亿,环比下滑约23%,同比下滑约8%。 *数据源于鲸参谋-行业趋势分析…...

elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)
目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结 1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...