Debezium 3.3.0.Alpha2 已发布,带来了关键修复和强大的增强功能!

亮点包括心跳处理修复、从精确的 oplog 位置开始 MongoDB 流式传输的能力、更快的 PostgreSQL TOAST 性能、JDBC sink 中扩展的 TSVECTOR 支持,以及 PostgreSQL 中改进的发布 DDL 处理。Debezium Platform 也通过更清晰的错误消息、细粒度的 UI 日志记录以及更好的源/目标定义获得了主要的可用性提升。

新功能和改进

以下描述了 Debezium 3.3.0.Alpha2 中所有值得关注的新功能和改进。要获取完整列表,请务必阅读 发布说明 以获取更多详细信息。

心跳不再持续发出

在 Debezium 3.3.0.Alpha1 中,用户报告了在使用 heartbeat.action.query 时出现问题,即 Debezium 会持续发出心跳事件,而不管配置的间隔。此回归现已修复,heartbeat.action.query 现在应该可以再次遵循配置的 heartbeat.interval.ms (DBZ-9340)。

从特定位置启动 MongoDB

Debezium 用户现在可以通过在连接器配置中指定新的连接器配置属性 capture.start.op.time,来从 MongoDB oplog 中的特定位置启动 MongoDB 源连接器。此新配置属性应为一个 long 数据类型值,表示 Bson 时间戳 (DBZ-9240)。

在连接器配置中保留此配置属性将导致连接器在重启时尝试从指定位置恢复。

建议在使用此功能时,一旦连接器开始流式传输更改,就移除该属性,以便将来任何重启都能遵循连接器偏移量中的恢复位置。

JDBC Sink 支持 PostgreSQL TSVECTOR 数据类型

在 Debezium 3.3.0.Alpha1 中,我们为 PostgreSQL 源连接器添加了对名为 TSVECTOR 的基于文本搜索的向量数据类型的支持 (DBZ-8470)。在此版本中,我们将支持扩展到了 JDBC Sink 连接器,以便可以将 TSVECTOR 值写入 PostgreSQL 目标 (DBZ-8471)。如果目标是 PostgreSQL 以外的数据库,则该值将被写入基于字符的列中。

PostgreSQL Publication DDL 超时

虽然我们通常不记录内部配置属性,但我们在过去添加了一个新的内部 PostgreSQL 连接器配置属性 internal.create.slot.command.timeout,用于在创建连接器复制槽时应用 90 秒的默认超时。这是为了解决阻塞事务的问题,这些事务会阻止连接器前进,因为在事务活动期间无法创建复制槽。

我们在 Debezium 3.3 中扩展了此超时的覆盖范围,使其适用于创建和修改 PostgreSQL 连接器 Publication 的 DDL 操作 (https://issues.redhat.com/browse/DBZ-9310)。如果您注意到创建/更新 Publication 或槽时出现超时,您可能需要增加此配置属性(默认为 90)或将其设置为 0 以禁用超时功能。

改进 PostgreSQL TOAST 列性能

Debezium for PostgreSQL 的 pgoutput 解码器使用一种特定模式来确定 TOAST 列的值是否与预定义的标记对象列表匹配,这些对象表示值在更改事件中不存在。然而,当事件负载包含大型文本或二进制数据时,由于在比较之前计算哈希值的开销,这种模式的效率不高。

为了提高性能,该实现现在使用直接相等性检查,避免了对大型 TOAST 列负载进行昂贵的哈希计算(DBZ-9345)。此更改减少了处理具有大文本或二进制数据的事件时的处理开销。

SQL Server 心跳改进

SQL Server 的心跳行为现在将在 CDC 表中没有更改时发出心跳事件 (DBZ-9364)。这应该有助于确保,即使由于非捕获表的更改而导致数据库中的 LSN 继续推进,偏移量也能保持同步。

Debezium Platform 改进

Debezium 3.3 还为 Debezium Platform 带来了一些新改进,以提升用户体验。

其中一项改进是关于错误处理和消息。我们改进了此过程,以提供更清晰的描述,以便在用户界面中为用户提供帮助 (DBZ-8836),如下图所示:

Platform Error Improvements

此外,该平台现在允许用户为用户界面定义细粒度的日志记录配置,这在调试或诊断连接器相关问题时非常有用 (DBZ-8890),如下图所示:

Platform Logging Improvements

最后,在定义源和目标类型时,我们还添加了一些细节改进 (DBZ-9373)。我们附上了一段视频,概述了这些功能的用法:

其他更改

  • 增量快照偏移量在任务重启时无法加载 DBZ-9209

  • Debezium Server Azure Event Hubs sink 重复所有之前的事件 DBZ-9304

  • 归档日志仅模式在没有更多可用数据时不会暂停挖掘 DBZ-9306

  • 为连接创建 REST 资源 DBZ-9313

  • 使用多个任务时,事件可能会被错误地处理多次 DBZ-9338

  • 允许重做线程刷新 SCN 调整可配置 DBZ-9344

  • 获取事务事件计数可能导致 NullPointerException DBZ-9349

  • 确保 dbz 服务器启动时 JAVA_OPTS 环境变量正确 DBZ-9352

  • 当字段的 schema 类型为 BYTES 时,ReselectColumnsPostProcessor 出现问题 DBZ-9356

  • MariaDB 无法解析使用 RENAME COLUMN IF EXISTS 语法的 ALTER TABLE DBZ-9358

  • 当表结构更改并抛出 ORA-01466 时,Oracle 无法重新选择列 DBZ-9359

  • 在创建操作中,单引号被双引号括起来 DBZ-9366

  • 使用归档日志仅模式时,挖掘上限计算错误 DBZ-9370

  • 由于 record.key 序列化错误,Kafka 生产者异常未正确记录 DBZ-9378

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

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