新年伊始,新开发周期也随之而来,我很高兴地宣布 Debezium 3.1 的第一个预发布版本,即 3.1.0.Alpha1。此版本包含各种新功能,包括 PostgreSQL 和 MySQL 在 JDBC sink 中的向量数据类型支持、新的自适应时间精度模式、MariaDB SSL 支持等。废话不多说,让我们直接深入了解这些新功能和改进。
重大变更
任何软件的新主要版本通常都会包含一些破坏性变更。Debezium 3.1.0.Alpha1 版本也不例外,因此我们来讨论一下您需要了解的主要变更。
事件 source 块现已版本化
Debezium 的变更事件包含一个 source 信息块,用于描述变更事件来源的属性。source 信息块是 Kafka Struct 数据类型,可以进行版本化;然而,在旧版本的 Debezium 中,version 属性是留空的。
在 Debezium 3.1 及更高版本中,source 信息块现已版本化,并将设置为版本 1 (DBZ-8499)。随着未来实现的变更,版本将相应地递增。
| 对于使用 schema registry 的用户来说,此更改可能会引入 schema 兼容性问题。 |
稀疏向量逻辑类型重命名
PostgreSQL 扩展 vector(即 pgvector)提供了多种向量数据类型的实现,其中包括一种名为 sparsevec 的类型。稀疏向量是一种仅存储向量中已填充键/值条目的向量,排除未设置的条目,以最小化表示数据集的空间。
Debezium 3.0 引入了名为 io.debezium.data.SparseVector 的 SparseVector 逻辑类型。在我们开始评估其他关系数据库的实现时,我们发现当开始实现其他稀疏向量类型时,逻辑名称不够充分 (DBZ-8585)。
在 Debezium 3.1 中,我们将 PostgreSQL 连接器中的 io.debezium.data.SparseVector 类重新打包到 Debezium 的核心包中,还将该类重命名为 SparseDoubleVector,并将逻辑名称更改为 io.debezium.data.SparseDoubleVector,以与类名更改保持一致。
| 对于那些可能曾经使用过 |
新功能和改进
升级到 Debezium 3.1.0.Alpha1 在多个组件中引入了多项新功能和改进。
JDBC sink 支持 MySQL/PostgreSQL 向量数据类型
我们在 Debezium 3.0(2024 年底)中引入了多种向量数据类型,包括 MySQL/PostgreSQL 的 vector 和 PostgreSQL 的 halfvec/sparsevec。在 Debezium 3.1 中,我们将这些数据类型对 JDBC sink 连接器的支持进行了扩展 (DBZ-8571)。
这个新的映射包含几条规则:
-
MySQL 到 MySQL 或 MySQL 到 PostgreSQL,
vector数据类型会自动映射。 -
PostgreSQL
vector到 PostgreSQL 或 MySQL,vector数据类型会自动映射。 -
如果目标是 PostgreSQL,则
halfvec和sparsevec的复制会自动映射。
对于没有向量数据类型原生映射或不支持此类类型的目标数据库,该字段无法原生写入目标系统。对于此类用例,您可以使用 io.debezium.transforms.VectorToJsonConverter 转换器在数据传输过程中将其更改为 JSON 表示形式,大多数数据库都普遍支持 JSON。数据库中的目标列类型将是 json、clob 或文本类型的列,具体取决于数据库供应商。
随着越来越多的源数据库向量类型得到支持,我们将继续在未来扩展这一点。
新的自适应时间精度模式类型
Debezium 一直支持多种 time.precision.mode 类型,如 adaptive 和 connect。在 Debezium 3.1 中,增加了三种新模式,为基于时间的列提供了更多的定制和选择 (DBZ-6387)。
| 模式 | 描述 |
|---|---|
| 配置连接器将时间值映射为 UTC 中的 ISO-8601 格式字符串。 |
| 配置连接器以微秒精度映射时间值(如果可用)。 |
| 配置连接器以纳秒精度映射时间值(如果可用)。 |
使用 microseconds 或 nanoseconds 基于精度模式时,连接器将根据字段是 DATE、TIME 还是 TIMESTAMP 类型来选择使用不同的语义类型。请参阅您特定的连接器文档,了解连接器如何解释此信息。
MariaDB SSL 支持
Debezium 3.1 引入了多项新的 MariaDB 特有模式,旨在允许 MariaDB 连接器使用 SSL 进行连接,这些模式与 MariaDB 驱动程序兼容 (DBZ-8482)。下表描述了这些模式以及 MySQL 中的等效模式,如果您从旧的 MySQL 连接器部署迁移到新的独立 MariaDB 连接器。
| 模式 | 描述 |
|---|---|
| 禁用 SSL/TLS 连接。所有连接都不安全。这等同于 MySQL 的 |
| 使用 SSL/TLS 进行加密,但不执行证书或主机名验证。这等同于 MySQL 的 |
| 使用 SSL/TLS 进行加密并执行证书验证,但不执行主机验证。这等同于 MySQL 的 |
| 使用 SSL/TLS 进行加密并执行证书和主机验证。这等同于 MySQL 的 |
对于 MariaDB,这些属性作为 database.ssl.mode 属性的一部分传递。
SQL Server 流式内存改进
Microsoft SQL Server 驱动程序无法在同一连接上执行多个 select。在某些情况下可能会发生这种情况,这通常会导致所有数据缓冲到内存中,这可能效率很低或导致内存问题。
为了解决此驱动程序限制,Debezium 3.1 引入了一个新的配置选项 streaming.fetch.size (DBZ-8557)。此配置选项允许指定在流式传输过程中从每个表读取的最大行数。默认情况下,此设置为 0,因此行为保持不变,但将其设置为正值会导致多次与数据库进行数据往返,以配置大小的批次获取数据。
Debezium 基于 WASM 的内容路由/过滤
例如,给定以下 Go 程序
package main
import (
"github.com/debezium/debezium-smt-go-pdk"
)
func process(proxyPtr uint32) uint32 {
var topicNamePtr = debezium.Get(proxyPtr, "topic")
var topicName = debezium.GetString(topicNamePtr)
return debezium.SetBool(topicName == "theTopic")
}
func main() {} 此 Go 程序可以编译为 WebAssembly .wasm 文件,然后由 ContentBasedRouter 或 Filter 转换器使用。以下示例展示了如何将其与 Filter 转换器一起使用
{
"transforms": "route",
"transforms.route.type": "io.debezium.transforms.Filter",
"transforms.route.condition": "<path-to-compiled-wasm-file>",
"transforms.route.language": "wasm.chicory"
} 在此示例中,如果事件的主题与 theTopic 匹配,则该事件将被传递,否则该事件将被丢弃。
有关更多信息,您可以查阅 Filter SMT 和 Content-based Router SMT 的文档。
显式使用 S3 存储的路径样式寻址
S3 SDK 在 2.18+ 中引入了一个小的行为更改,即 URL 使用虚拟主机样式而不是路径样式构建,如 上游 S3 SDK 社区中所讨论的。虽然 S3 存储桶支持这两种 URL 样式,但在某些情况下,包括测试用例,虚拟主机样式可能尚未得到支持。
在 Debezium 3.1 中,添加了一个新的配置选项 schema.history.internal.s3.forcePathStyle,默认为 false (DBZ-8569)。在您可能需要路径样式 URL 而不是虚拟主机样式 URL 的情况下,将其设置为 true 将恢复旧的 URL 行为。
Debezium Server Pulsar 基于键的批处理支持
Debezium 3.1 引入了一种新的、经过改进的吞吐量选项,用于 Apache Pulsar 的 KeyShared 订阅。添加了一个新的配置选项 debezium.sink.pulsar.producer.batchBuilder,可以将其设置为 KEY_BASED,但默认为 DEFAULT (DBZ-8563)。
当设置为使用 KEY_BASED 时,此订阅模型会将具有相同键的消息按顺序仅传递给一个消费者。有关 Key_Shared 订阅模型的更多信息,请参阅 Apache Pulsar 文档。
其他更改
-
提交偏移量时发生的异常不会触发重试逻辑。DBZ-2386
-
修复了在启用有序事务元数据时启动时的无效 gtid 错误。DBZ-8541
-
Debezium operator 生成错误的 offset 和 schema history 属性。DBZ-8543
-
最近的日志切换在日志收集过程中可能被视为一致。DBZ-8546
-
基于内容的路由表达式变量标头在代码中是单数形式。DBZ-8550
-
将 MongoDB 驱动程序升级到 5.2。DBZ-8554
-
在 Vitess v20 中使用 enum set strings 标志来解码 enums/sets。DBZ-8561
-
MongoDataConverter 不识别嵌套的空数组。DBZ-8572
-
修复了 Transformation UI 部分中的问题。DBZ-8575
-
当 log.mining.restart.connection 启用且连接默认为 PDB 而不是 CDB$ROOT 时,日志切换时会发生 ORA-65040。DBZ-8577
-
将 Outbox Extension 移至 Quarkus 3.17.7。DBZ-8583
非常感谢社区中所有辛勤工作的贡献者,他们为此次发布做出了贡献:Alvar Viana、Andrea Peruffo、Andrei Leibovski、Anisha Mohanty、Kunal Bhatnagar、Chris Cranford、Christian Seki、Dongwook Chan、Enzo Cappa、Eric Xiao、Fan Yang、Franz Emberger、Gaurav Miglani、Giovanni Panice、Guangnan Shi、Gunnar Morling、Gustavo Lira、Hossein Torabi、Jakub Cechacek、Jean Vintache、Jiri Pechanec、Jon Bruno、Jonas Thelemann、Jose Carvajal Hilario、Juanma Barea、Katerina Galieva、Kavya Ramaiah、Lars M. Johansson、Mario Fiore Vitale、Martin Vlk、Martin Walsh、Nathan Smit、Ole-Martin Bratteng、Ondrej Babec、P. Aum、Philippe Labat、René Kerner、Robert Roldan、Sergey Seroshtan、Stanislav Deviatov、Stefan Miklosovic、Thomas Thornton、Timo Schmidt、Vadzim Ramanenka、Vojtech Juranek、dario,以及 ismail simsek!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。