我们很高兴地宣布 Debezium 3.3.0.CR1 的发布,它在可靠性、创新性和兼容性方面带来了显著的改进。此版本基于 Kafka 4.1.0,并引入了几个关键增强功能,将简化您的变更数据捕获工作流。

重大变更

随着任何新软件主要版本的发布,通常都会有一些重大变更。Debezium 3.3.0.CR1 版本也不例外,让我们来讨论一下您应该了解的主要变更。

Db2 偏移量位置验证不可靠

由于 Db2 中偏移量位置验证的可靠性问题,我们已暂时禁用验证以防止错误失败(DBZ-9470)。因此,目前无法为 Db2 连接器使用 when_needed 快照模式。

影响:如果您正在使用 when_needed 快照模式与 Db2,您将需要使用替代模式,直到此限制在未来的版本中得到解决。

JDBC Sink 数据类型精度更改

升级到 Hibernate 7.1.0.Final 带来了更精确的数据类型处理,特别是对于时间型和浮点型数据(DBZ-9481)。

时间型

timetimestamp 列现在默认为更高的精度。例如,Oracle 的 time 和 timestamp 列将使用 9 位精度创建,而不是之前的默认 6 位精度。

浮点型

Debezium 明确偏好使用 floatrealdouble precision 来表示浮点值。如果您需要 Oracle 的二进制浮点数和双精度数据类型,请在连接器配置中将 hibernate.dialect.oracle.use_binary_floats 设置为 true

只有新的时间型列将以新的 9 位精度添加,现有列不受影响。如果您希望现有的列也使用更高的精度定义以保持一致性,则必须手动完成。

新功能和改进

Kafka 4.1.0 为更好的性能奠定基础

Debezium 3.3.0.CR1 是基于 Kafka Connect 4.1.0 构建的,并已与 Kafka brokers 版本 4.1.0 进行了彻底测试(DBZ-9460)。这确保了 Debezium 可以在最新、最稳定的 Kafka 基础设施上运行。

在升级之前,请查看 Kafka 文档,以确保与您现有的 Kafka broker 版本兼容。

JDBC Sink 可自我修复数据库错误

JDBC Sink 连接器现在会自动重试更改处理过程中发生的 SQL 异常,为自我修复场景提供了关键的缓冲,以提高连接器的弹性(https://issues.redhat.com/browse/DBZ-7772)。

这在多任务环境中尤其有价值,因为并发写入同一表可能会导致锁冲突。连接器现在可以自行从这些瞬时问题中恢复,而不是完全失败或将重启委托给运行时,从而显著提高了连接器的整体可靠性。

更智能的 Oracle LogMiner 归档目标管理

对于某些 Oracle 连接器环境,现在可以使用一种基于优先级的归档目标策略。以前,用户必须指定单个目标(即 LOG_ARCHIVE_DEST_2),当新的主节点使用不同的目标名称时,这需要在故障转移场景中进行手动配置更改。

现在,用户可以通过逗号分隔的列表以优先级顺序配置多个目标(https://issues.redhat.com/browse/DBZ-9041)。例如,LOG_ARCHIVE_DEST_1,LOG_ARCHIVE_DEST_2。连接器将智能地选择第一个本地且有效的目标,适应不需要配置更改的故障转移场景。

例如,Oracle 主实例使用 LOG_ARCHIVE_DEST_1,备用实例使用 LOG_ARCHIVE_DEST_2。使用新的优先级顺序功能,在发生故障转移时,连接器会无缝地从 LOG_ARCHIVE_DEST_1 切换到 LOG_ARCHIVE_DEST_2

请注意,这仅在备用环境在灾难恢复故障转移场景中成为新的主环境时才有用。这与 Oracle Real Application Cluster (RAC) 节点不可用,并且连接器连接到群集中的下一个可用节点的情况不同。在后一种情况下,群集中的所有节点共享相同的归档目标配置,并且不适用优先级顺序。

增强的 Informix 默认值本地化支持

Informix 连接器现在能更智能地处理区域设置特定的数据库配置(DBZ-9181)。连接器不会假设为美国区域设置,而是会根据您的实际数据库配置正确解析 DBMONEYDBCENTURYDBDATE 等区域设置相关的默认值。

此改进确保了跨不同国际部署的更准确的数据捕获,并消除了非美国环境中潜在的数据解析错误。

其他更改

  • 跨两个查询提取的事务可能随机导致不支持的操作 DBZ-8747

  • 添加 REST API 以获取表列表 DBZ-9317

  • 源和目标实体必须链接到连接实体 DBZ-9333

  • 实现 Kafka 连接验证器 DBZ-9334

  • 解除 Netty 镜像固定 DBZ-9390

  • 更新 JDBC Sink 连接器文档,以标识 Debezium 不支持的数据类型 DBZ-9403

  • 公开用于获取连接 JSON 模式的端点 DBZ-9420

  • 向 Debezium Platform 添加缺失的目标 DBZ-9442

  • Oracle 连接器重新选择异常处理(ORA-01555 + ORA-22924)DBZ-9446

  • 在只读使用的情况下,不应使用 DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG DBZ-9452

  • 改进 Debezium Platform 的 Maven 编译器配置 DBZ-9453

  • Docker Rhel 执行的无 Zookeeper Kafka DBZ-9462

  • Debezium Server 因 CNFE 失败 DBZ-9468

  • 在重新创建快照可调用表的列表时发生 OutOfMemory 异常 DBZ-9472

  • Debezium Server 对 SqlServer 源报告“AttributeNotFoundException QueueTotalCapacity”DBZ-9477

  • 当列名包含反引号时,出现“未知列在 'field list' 中”DBZ-9479

  • 更新 Mockito 到 5.19.0 DBZ-9480

  • 更新到 AssertJ 3.27.5 DBZ-9482

  • MySQL 事件获取头信息时抛出 NullPointerException DBZ-9483

  • 在 ServiceLoader manifest 中声明源/转换器,以便与新的插件发现模式兼容 DBZ-9493

总共有 29 个问题 在 Debezium 3.3.0.CR1 中得到解决。变更列表也可以在我们的 发行说明 中找到。

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