正如我上周提到的,我们正处于下一个主要版本发布的最后冲刺阶段。我们很高兴地宣布下一个候选版本,Debezium 3.0.0.CR2!让我们快速了解一下这个新版本中的更改和改进……

新功能和改进

Debezium 3.0.0.CR2 引入了多项改进和新功能,让我们逐一来看。

PostgreSQL 隔离级别支持

一个长期存在的增强功能,即对 PostgreSQL 的快照隔离支持,现在已经实现了!一个新的连接器配置属性 snapshot.isolation.mode,允许连接器在执行初始和临时阻塞快照步骤时控制所使用的隔离级别。有四种隔离级别:serializable(默认)、repeatable_readread_committedread_uncommitted。您可以在 文档 (DBZ-1252) 中找到关于这些隔离级别以及它们如何与 PostgreSQL 协同工作的详细信息。

JDBC 在特定故障时重试刷新

JDBC sink 使用一组缓冲区来提高写入目标数据库的吞吐量。在某些用例中,由于其他应用程序可能锁定了特定行或表,缓冲区刷新操作可能会遇到特定异常。为了改善用户体验,已添加了两个新的配置属性:

flush.failure.max.retries

定义刷新失败时重试的次数。

flush.failure.retries.wait.ms

定义每次重试之间的等待毫秒数。

重试功能默认启用,尝试最多重试 5 次,每次重试之间间隔 1 秒。如果您不希望启用重试,将 flush.failure.max.retries 设置为 0 将禁用此功能 (DBZ-7291)。

Oracle EXTENDED 最大字符串大小支持

Oracle 扩展字符串是一项功能,它允许将字符数据传统的 4000 字节限制提高到 32K。这是通过应用数据库升级来完成的,该升级将数据库参数 max_string_size 设置为 EXTENDED。然后,扩展字符串功能允许使用与 4000 字节或更小的字符数据相同的 SQL 语法来处理高达 32K 的字符数据,而无需强制您使用 CLOB 操作。

使用 Debezium 3,您现在可以将 Oracle 连接器与使用扩展字符串的数据库一起使用,并直接从事务日志捕获更改 (DBZ-8039)。由于数据库级别的扩展字符串实际上是 CLOB 操作,因此解析此类列类型需要将 lob.enabled 设置为 true

由于此新功能尚处于实验阶段,我们非常希望听到社区的任何反馈!

Oracle CLOB/BLOB 默认值支持

在某些情况下,Oracle 用户可能会定义需要 CLOB 或 BLOB 的表,并在未提供字段时使用 EMPTY_BLOB()EMPTY_CLOB() 函数来定义默认值。在之前的版本中,Debezium 并未评估这些特殊函数,因此此类列会被发出为可选字段,而不是必填字段。

从 Debezium 3 开始,当指定了 EMPTY_BLOB()EMPTY_CLOB() 默认值时,该字段将被发出为必填字段。此外,该字段还将包含适当的默认值,分别为空字节数组或空字符串 (DBZ-8248)。

其他更改

  • Debezium 在抛出 ORA-00600 krvrdccs30 错误后不会自动重启 DBZ-8223

  • JDBC sink 未包含字段(与文档不符) DBZ-8224

  • Streams 文档中关于配置日志记录的链接损坏 DBZ-8231

  • 为 JDBC 连接器的 passthrough hibernate.* 属性编写文档 DBZ-8232

  • 异步引擎中的无限处理线程 DBZ-8237

  • 流式指标在临时阻塞快照后卡住 DBZ-8238

  • DDL 语句无法解析 IF EXISTS DBZ-8240

  • 默认使用随机引擎工厂 DBZ-8241

  • JDBC sink 测试套件应为 e2e 测试使用 debezium/connect:nightly 镜像 DBZ-8245

  • 将 Infinispan 升级到 15.0.8.Final DBZ-8246

  • AbstractConnectorTest consumeRecordsUntil 可能会过早退出循环 DBZ-8250

  • Debezium Server Kafka 在 DBZ-7575 修复后出现性能回归 DBZ-8251

  • 在文档中添加关于 JDBC 批量重试配置的说明 DBZ-8252

  • 修复共享 MariaDB/MySQL 文件中的条件化 DBZ-8254

  • MySQL 连接器中包含 Error Prone 库 DBZ-8258

  • Debezium.text.ParsingException: DDL 语句无法解析 DBZ-8259

  • 添加 Oracle FUTC 许可证 DBZ-8260

  • 从产品程序集包中移除 Oracle 库 DBZ-8261

  • debezium-connector-binlog 不需要 MariaDB 依赖 DBZ-8263

  • 为 Debezium Server 提供子集包 DBZ-8264

总而言之,此版本修复了 44 个问题。以下是一些其他值得注意的更改列表:

非常感谢社区中为这个版本做出贡献的所有人:Andrei LeibovskiAnisha MohantyChris CranfordCody HolmesInki HwangJiri PechanecMario Fiore VitaleRobert RoldanVojtěch Juránek,以及 martin

下一步计划与展望?

最重要的是,假设没有出现关键问题,您应该会在下周看到 Debezium 3 的最终版本。随着我们开始迈向 2024 年的剩余时间,讨论今年剩余时间和 2025 年的未来计划至关重要。

在 2024 年剩余的时间里,团队将继续为 Debezium 3 提供维护和错误修复版本。这些版本将按照我们正常的节奏发布,大约每 2-3 周一次,除非报告或修复了问题。但是,本季度会有所变化的是,今年 12 月不会像往年那样发布小版本。做出这个决定是为了让团队能够专注于一系列“低垂的果实”活动,这些活动不一定直接与开发任务相关。

此外,随着年底的临近,我们将发布我们对 2025 年路线图的展望以及其包含的内容。现在是思考您希望在路线图上看到什么并参与其中的绝佳时机。您随时可以通过我们的 邮件列表 或我们的 Zulip 聊天 与我们联系!

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