虽然团队一直在努力开发 Debezium 3.1,但我们很高兴地宣布 Debezium 3.0.8.Final 的新维护更新。
虽然我们的维护版本通常主要关注稳定性改进,但我们很高兴地分享,在此维护版本中我们还包含了一些新功能,以改善整体用户体验。
重大变更
与任何新软件的重大版本发布一样,通常会有一些破坏性更改;然而,如果可能,我们通常倾向于在维护版本中避免这些更改。不幸的是,Debezium 3.0.8.Final 是一个例外,我们在此版本中引入了一些破坏性更改。
稀疏向量逻辑类型重命名
PostgreSQL 扩展程序 vector(又名 pgvector)提供了各种向量数据类型的实现,其中一种称为 sparsevec。稀疏向量仅存储向量中已填充的键/值条目,排除未设置的条目,以最小化用于表示数据集的空间。
Debezium 3.0 引入了名为 io.debezium.data.SparseVector 的 SparseVector 逻辑类型。当我们开始评估其他关系型数据库的实现时,我们发现当开始实现其他稀疏向量类型时,逻辑名称不足以应对(DBZ-8585)。
在 Debezium 3.1 和 3.0.8.Final 中,我们已将 PostgreSQL 连接器中的 io.debezium.data.SparseVector 类重新打包到 Debezium 的核心包中,还将该类重命名为 SparseDoubleVector,并将逻辑名称更改为 io.debezium.data.SparseDoubleVector,以匹配类名更改。
| 对于那些可能曾经使用过 |
Schema 历史配置默认值更改
schema.history.internal.store.only.captured.databases.ddl 的文档提供了不正确的默认值。虽然这不是一个特定于代码的破坏性更改,但您应该花点时间重新评估您的部署配置是否依赖于不同的默认值(DBZ-8558)。
潜在的 Vitess 数据丢失
Debezium for Vitess 连接器存在一个罕见但关键的数据丢失 bug,该 bug 自五年前首次引入以来一直存在。如果主键更新是事务中的最后一个操作,则可能会丢失记录。此 bug 影响所有先前版本。强烈建议用户立即更新到 3.0.8.Final 或 3.1.0.Alpha2 或更高版本,以解决潜在的数据丢失问题(DBZ-8594)。
Oracle 的 Reselect column 后处理器行为已更改
ReselectColumnsPostProcessor 的行为已更改,Oracle LOB 列将被重新选择,无论 lob.enabled 配置属性的值如何。此更改使用户无需挖掘 LOB 列即可通过列重新选择过程填充 LOB 列,作为替代方案(DBZ-8653)。
新功能和改进
升级到 Debezium 3.0.8.Final 为多个组件带来了一些新功能。
MariaDB 的 SSL 连接
用户可能发现,在先前版本的 Debezium 中,从 MariaDB 捕获更改时 SSL 连接不起作用。我们很高兴地报告,这个问题已经得到修复,用户应该能够使用 SSL 连接来使用 MariaDB(DBZ-8482)。
虽然可以使用相同的配置属性 database.ssl.mode,但 MariaDB 使用不同的值来表示驱动程序和数据库之间的协商步骤。下表概述了 MariaDB 的设置。
| SSL 模式 | 描述/目的 |
|---|---|
| 指定 JDBC 驱动程序不尝试与数据库服务器协商 SSL 连接。如果数据库服务器需要安全连接,连接将被拒绝。 |
| 指定 JDBC 驱动程序应使用 SSL/TLS 进行数据加密,并且证书和主机名不会被验证。 |
| 与 *trust* 模式相同,但还会执行证书验证,但不验证主机名。 |
| 工作方式与 |
| Debezium 默认使用 MariaDB 11.4 或更高版本默认使用 SSL 连接,因此您需要设置适当的 |
其他更改
以下是 3.0.8.Final 中一些值得注意的更改
-
将 MySQL 和 MariaDB 语法与上游版本对齐(DBZ-8270)
-
JDBC sink connector 不会从 postgres 数据库表中删除行(DBZ-8287)
-
MariaDB 适配器在 ALTER USER 语句上失败(DBZ-8436)
-
表达式导致 Percona SEQUENCE_TABLE 函数中的 SQL 解析器异常(DBZ-8559)
-
MongoDataConverter 不识别嵌套的空数组(DBZ-8572)
-
当 log.mining.restart.connection 启用且连接默认为 PDB 而非 CDB$ROOT 时,日志切换时会发生 ORA-65040(DBZ-8577)
-
Reduced record buffer 未能处理带有主键字段的 RECORD_VALUE(DBZ-8593)
-
使用混合挖掘策略时,具有生成列的表事件失败(DBZ-8597)
-
ANTLR DDL 解析错误(DBZ-8600)
-
将 Debezium Server 和 Operator 更新到 Quarkus 3.15.3 LTS(DBZ-8601)
-
移除关于撤销更改失败的误导性日志条目(DBZ-8645)
-
Oracle 指标 OldestScnAgeInMilliseconds 未考虑数据库时区(DBZ-8646)
-
使用带有 DELETE 事件的 RECORD_VALUE 会导致 NullPointerException(DBZ-8648)
-
批次大小计算错误地使用了 min-batch-size(DBZ-8652)
-
当事务包含许多约束冲突时,Oracle 性能下降(DBZ-8665)
-
跳过具有 commit 且 redo thread 为 0 的空事务(DBZ-8681)
-
DDL 语句无法解析:GRANT SENSITIVE_VARIABLES_OBSERVER(DBZ-8685)
-
当列类型在 ALTER TABLE 期间未更改时,列的精度会被重置(DBZ-8700)
-
使用 DEFAULT ON NULL 子句时,ALTER TABLE MODIFY COLUMN 失败(DBZ-8720)
-
ExtractChangedRecordState SMT 现在可以与默认值一起使用(DBZ-8721)
-
Oracle RAC 节点重启导致 redo thread 永久不一致(DBZ-8724)
-
指定非零的 archive.log.hours 值会生成错误的 SQL(DBZ-8725)
-
debezium/connect docker 镜像在 arm64 上不可用(DBZ-8728)
-
未知 DDL ALTER INDEX <name> 被忽略(DBZ-8741)
-
MariaDB 的 schema.history.internal.skip.unparseable.ddl 可能存在问题(DBZ-8745)
-
Oracle 快照的 source.ts 未考虑数据库时区差异(DBZ-8749)
非常感谢社区中所有为此次发布勤奋工作的贡献者:Alvar Viana, Anisha Mohanty, Chris Cranford, Gaurav Miglani, Henk van Dyk, Jakub Cechacek, Jiri Pechanec, Katerina Galieva, Robert Roldan, Sergey Seroshtan, Thomas Thornton, Vojtech Juranek, Yannick Eisenschmidt, Zhongqiang Gong, and حمود سمبول!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。