虽然团队一直在努力开发 Debezium 3.1,但我们很高兴地宣布 Debezium 3.0.8.Final 的新维护更新。

虽然我们的维护版本通常主要关注稳定性改进,但我们很高兴地分享,在此维护版本中我们还包含了一些新功能,以改善整体用户体验。

重大变更

与任何新软件的重大版本发布一样,通常会有一些破坏性更改;然而,如果可能,我们通常倾向于在维护版本中避免这些更改。不幸的是,Debezium 3.0.8.Final 是一个例外,我们在此版本中引入了一些破坏性更改。

稀疏向量逻辑类型重命名

PostgreSQL 扩展程序 vector(又名 pgvector)提供了各种向量数据类型的实现,其中一种称为 sparsevec。稀疏向量仅存储向量中已填充的键/值条目,排除未设置的条目,以最小化用于表示数据集的空间。

Debezium 3.0 引入了名为 io.debezium.data.SparseVectorSparseVector 逻辑类型。当我们开始评估其他关系型数据库的实现时,我们发现当开始实现其他稀疏向量类型时,逻辑名称不足以应对(DBZ-8585)。

在 Debezium 3.1 和 3.0.8.Final 中,我们已将 PostgreSQL 连接器中的 io.debezium.data.SparseVector 类重新打包到 Debezium 的核心包中,还将该类重命名为 SparseDoubleVector,并将逻辑名称更改为 io.debezium.data.SparseDoubleVector,以匹配类名更改。

对于那些可能曾经使用过 SparseVector 逻辑类型的用户,您可能需要调整您的代码以识别新的逻辑类型名称。

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 模式 描述/目的

disabled

指定 JDBC 驱动程序不尝试与数据库服务器协商 SSL 连接。如果数据库服务器需要安全连接,连接将被拒绝。

trust

指定 JDBC 驱动程序应使用 SSL/TLS 进行数据加密,并且证书和主机名不会被验证。

verify-ca

与 *trust* 模式相同,但还会执行证书验证,但不验证主机名。

verify-full

工作方式与 verify-ca 类似,但还会执行主机名验证。这是 TLS 的标准行为。

Debezium 默认使用 disabled 作为 SSL 模式。

MariaDB 11.4 或更高版本默认使用 SSL 连接,因此您需要设置适当的 database.ssl.mode 或禁用 MariaDB 的 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

总共有 35 个问题在 Debezium 3.0.8.Final 中得到解决。更改列表也可以在我们的 发布说明中找到。

Chris Cranford

Chris 是 IBM 的一名软件工程师,之前在 Red Hat 工作,他致力于 Debezium 项目,并每天都在深入研究 Oracle 和 Change Data Capture 的各个方面。他此前曾从事 Hibernate(领先的开源 JPA 持久化框架)方面的工作,并且继续为 Quarkus 做贡献。Chris 居住在美国北卡罗来纳州。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×