距离 Debezium 2.6.0.Final 发布还有一周时间,我很荣幸地宣布 Debezium 2.6.0.CR1,这是 2.6 版本流的第一个候选版本。此版本包含多项改进,包括 Oracle OpenLogReplicator 适配器的 XML 支持、Debezium Server 的 TRACE 级别日志记录支持、Cassandra 的可配置分区模式、MongoDB 和 Db2 的新快照 API 等。

此外,此版本还包含各种错误修复和一些重大更改。

让我们更详细地了解 Debezium 2.6.0.CR1 中包含的所有这些更改和改进;一如既往,您可以在 发行说明中找到此版本的完整更改列表。请记住,请特别注意任何可能影响您升级路径的重大更改。

重大变更

虽然我们努力避免破坏性更改,但有时为了朝着正确的方向发展,这些更改是不可避免的。此版本包含几项破坏性更改。

MySQL

MySQL 驱动程序已更新至 8.3.0 版本,此驱动程序与 MySQL 5.x 不兼容。如果您仍需要使用旧版本的 MySQL,请在安装后将驱动程序降级至与您的数据库兼容的版本(DBZ-7652)。

SQL Server

SQL Server 连接器在首次部署时未能捕获所有 Schema,而仅捕获配置的 include 列表中定义的表的 Schema。这是一个错误,可能会阻止用户在期望新表的 Schema 已存在于 Schema 历史 Topic 中时轻松地向连接器添加新表。该连接器现在正确地遵守了 store.only.captured.tables.ddl 配置选项(DBZ-7593)。

对于现有的连接器部署,如果您没有为 Schema 历史 Topic 指定 store.only.captured.tables.ddl 属性,连接器将开始捕获数据库中所有相关表的 Schema 更改。如果您想阻止这种情况并保留之前的行为,则需要通过添加 schema.history.internal.store.only.captured.tables.ddl 并将其值设置为 true 来调整您的连接器配置。

Vitess

Vitess 连接器之前使用 BEGIN 消息的时间戳作为源时间戳。此行为已更改为使用 COMMIT 时间戳,以反映其他连接器的行为(DBZ-7628)。

新功能和改进

Debezium 2.6.CR1 还引入了更多改进和功能,让我们逐一了解。

Oracle 的 OpenLogReplicator 支持 XML

Debezium for Oracle 连接器支持与 OpenLogReplicator 的连接,允许 Oracle 用户直接从事务日志流式传输更改。OpenLogReplicator 的最新版本 1.5.0 已添加对 XML 列类型的支持。

要开始使用 OpenLogReplicator 流式传输 XML,请将 OpenLogReplicator 进程升级到 1.5.0 并重新启动 replicator 进程。请注意,如果您想流式传输基于二进制的 XML 列数据,需要在 OpenLogReplicator 配置中启用此功能。

Debezium Server 的 TRACE 级别日志记录

Debezium Server 是 Debezium 源连接器的现成运行时,它使用 Quarkus 框架来管理源和宿连接器的部署。正如大多数遇到过疑问或 Bug 的 Debezium Server 用户所知,我们经常要求提供 TRACE 级别的日志,而这通常很困难,因为由于日志的最低级别是 Quarkus 的构建时配置,需要完全重新构建 Debezium Server。

从 Debezium 2.6.0.CR1 及更高版本开始,将不再需要这样做。默认情况下,构建时间配置已调整为包含 TRACE 日志级别,因此以后用户只需将日志级别设置为 TRACE 并重新启动 Debezium Server 即可获取日志(DBZ-7369)。

新的统一快照模式

快照过程是每个连接器生命周期中不可或缺的一部分,负责在需要时收集并发送数据存储中的所有历史数据到目标系统。对于使用多种连接器类型的 Debezium 用户来说,我们理解在连接器之间存在不同的快照模式有时会令人困惑。因此,此更改旨在解决这个问题。

对于许多已经尝试过或安装了 Debezium 2.6 预发布版本的用户来说,您已经在使用统一快照 SPI,因为它最初被设计为直接替代品,无需任何更改。此版本完成了 MongoDB 和 DB2 的工作。

其中最值得注意的更改包括:

  • 所有连接器都可用所有快照模式,除了 never,它仍然是 MySQL 特有的。这意味着以前可能不支持快照模式的连接器(例如 when_needed)现在可以使用此模式在连接器识别其必要时重新进行快照。

  • schema_only_recovery 模式已被弃用,并被 recovery 取代。

  • schema_only 模式也被弃用,并被 no_data 取代。

所有弃用的模式将一直可用到今年晚些时候的 Debezium 3。这将为用户提供大约六个月的时间来提前调整脚本、配置和流程。

Cassandra 可配置分区模式

当 Debezium Cassandra 连接器读取提交日志时,事件会按顺序处理并添加到队列中。如果存在多个队列,事件会根据提交日志文件的哈希值在这些队列之间分配。这会导致事件以非时间顺序发出。

在 Debezium 2.6 中,Cassandra 连接器的哈希算法现在使用分区列名来解析插入的队列索引。这应该提供更稳定的插入顺序,从而使事件按正确的顺序发出。

已添加一个新的配置选项来选择加入此新行为。Debezium 用户可以添加新的配置属性 event.order.guarantee.mode 并将其设置为 partition_values 来利用此新模式。默认情况下,该属性保留旧行为,使用默认值 commitlog_file

其他修复

此外,此版本还包含相当多的稳定性修复和 bug 修复。其中包括:

  • Log Mining Processor 在 LogMiner 查询未返回任何行时错误地推进 SCN DBZ-6679

  • debezium-connector-jdbc 发生 java.sql.SQLException: ORA-01461: 只能绑定 LONG 值 DBZ-6900

  • 对 MongoDB 的快照模式进行统一 DBZ-7304

  • 对 DB2 的快照模式进行统一 DBZ-7305

  • 对所有连接器的所有快照模式进行统一 DBZ-7308

  • Oracle 连接器在 Exadata 维护更新后无法找到 SCN DBZ-7389

  • Oracle LOB 在主键更改后重新查询对所有列类型均不起作用 DBZ-7458

  • 从 MySQL 复制的 TIME(n) 的值,如果原始值为负数,则不正确 DBZ-7594

  • Re-select 后处理器对复杂类型无效 DBZ-7596

  • 当配置为 "hex" 模式时,为二进制类型写入的 null 占位符而不是 toast DBZ-7599

  • Schema 快照 DDL 处理期间快照性能不佳 DBZ-7608

  • 移除 LogMiner 连续挖掘配置选项 DBZ-7610

  • Re-select 后处理器的性能 DBZ-7611

  • 引擎配置验证期间未捕获的异常 DBZ-7614

  • 增强的事件时间戳精度与 ExtractNewRecordState 结合使用不起作用 DBZ-7615

  • 增量快照查询不遵守 message.key.columns 顺序 DBZ-7617

  • Metric ScnFreezeCount 永不增加 DBZ-7619

  • JDBC 连接器不处理 ByteBuffer 字段值 DBZ-7620

  • 将 Quarkus Outbox 更新到 Quarkus 3.8.2 DBZ-7623

  • 将 Debezium Server 升级到 Quarkus 3.2.10 DBZ-7624

  • MongoDbReplicaSet 和 MongoDbShardedCluster 默认不应为每个 builder 实例创建新网络 DBZ-7626

  • Cassandra 可能存在 Jackson 依赖项不匹配 DBZ-7629

  • 从系统测试中移除遗漏的 lombok代码 DBZ-7634

  • 没有尾数的数字值无法解析 DBZ-7643

  • 将 JDBC 连接器添加到 artifact server 镜像准备中 DBZ-7644

  • 撤销 Oracle LogMiner 连续挖掘的移除 DBZ-7645

  • 为 MongoDB capture.mode.full.update.type 属性添加文档 DBZ-7647

  • PostgresConnectorIT 中缺少测试注解 DBZ-7649

  • 修复 MySQL 镜像在测试中的获取 DBZ-7651

  • RedisSchemaHistoryIT 持续失败 DBZ-7654

  • 将 Quarkus Outbox 扩展升级到 Quarkus 3.8.3 DBZ-7656

  • 将 SQL Server 测试镜像升级到 SQL Server 2022 DBZ-7657

  • 将 Debezium Server 升级到 Quarkus 3.2.11.Final DBZ-7662

  • 更新 QOSDK 和 Quarkus 以修复 vcs-url 注解 CVE DBZ-7664

  • 排除 jcl-over-slf4j 依赖项 DBZ-7665

  • MySQL 连接器解析带有 RETURNING 关键字的 DDL 失败 DBZ-7666

  • Schema history comparator 未能正确处理 SERVER_ID_KEY 和 TIMESTAMP_KEY DBZ-7690

  • Operator bundle 中生成重复的 envar DBZ-7703

下一步是什么?

距离 Debezium 2.6 最终发布还有一个多星期。如果您还没有尝试过任何最新的预发布版本,我们鼓励大家尝试一下,并在部署此候选版本时遇到任何问题时提供反馈。我们的目标是在即将到来的假期结束后立即发布 2.6.0.Final 版本。

随着团队开始转向 Debezium 2.7,这里有一些即将推出的亮点的预览:

  • 独立、官方的 MariaDB 连接器

  • 用户友好的偏移量操作

  • 所有关系型连接器的只读增量快照

  • Debezium Server UI 的第一个 PoC 预览

更多详情,请查看我们的路线图,了解 Debezium 2.7 及更高版本的全部未来计划。

一如既往,如果您有任何疑问或反馈,请随时在邮件列表Zulip 聊天中与我们联系。我们很想知道您希望在 Debezium 3 中看到哪些更改,请告诉我们!

下次再见……

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