我们很高兴地宣布 Debezium 2.5 发布系列的第三个维护版本,**Debezium 2.5.3.Final**。此版本包含一些改进和大量的错误修复,让我们深入了解一下……

重大变更

团队致力于避免次要版本之间出现任何潜在的破坏性更改;但是,此类更改有时是不可避免的。

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 来调整您的连接器配置。

改进和更改

Debezium Server 的 TRACE 级别日志记录

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

在 Debezium 2.5.3.Final 和即将发布的 Debezium 2.6.0.Final 版本中,将不再需要这样做。默认情况下,构建时配置已调整为包含 TRACE 日志级别,因此用户以后只需将日志级别设置为 TRACE 并重新启动 Debezium Server 即可获取日志(DBZ-7369)。

Informix 将 LSN 追加到事务标识符

Informix 数据库仅在存在并发事务时才增加事务标识符,否则对于顺序事务,该值保持不变。这可能会给希望在后处理步骤中利用事务元数据来排序更改事件的用户带来困难。

在 Debezium 2.5.3.Final 和即将发布的 2.6 版本中,Informix 将把日志序列号(LSN)追加到事务标识符,以便用户可以根据事务元数据轻松地对更改事件进行排序。事务标识符字段现在将使用 <id>:<lsn> 格式(DBZ-7454)。此更改会影响事务元数据事件和更改事件的 source 信息块,如下所示:

事务开始事件
{
  "status": "BEGIN",
  "id": "571:53195829",
  ...
}
事务结束事件
{
  "status": "END",
  "id": "571:53195832",
  ...
}
更改事件
{
  ...
  "source": {
    "id": "571:53195832"
    ...
  }
}

PostgreSQL 改进

更新了 JDBC 驱动程序

PostgreSQL 驱动程序已升级到 42.6.1 版本。

改进了日志记录

在 PostgreSQL 连接器启动期间,一些用户报告连接器卡住或似乎陷入无限循环(DBZ-7581)。问题似乎是 pg_replication_slot_advance 的执行时间超过了数据库读取超时时间,而抛出的异常不足以识别问题。在这种情况下,日志记录已得到显著改进,以识别此根本原因,以便用户在遇到此问题时可以进行必要的调整。

其他更改

总共有 25 个问题 在此版本中得到修复。

  • MongoDB 连接器中的 NullPointerException DBZ-6434

  • 数值默认值小数点精度不匹配 DBZ-7562

  • 文档冲突 DBZ-7565

  • Oracle 连接器始终引入 OLR 依赖项 DBZ-7579

  • 正确处理 JDBC 连接器依赖项 DBZ-7580

  • 不可用的 Toasted HSTORE Json Storage Mode 列导致序列化失败 DBZ-7582

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

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

  • 使用 Infinispan Buffer 序列化带有 NULL 值的 XML 列失败 DBZ-7598

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

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

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

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

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

  • Metric ScnFreezeCount 永不增加 DBZ-7619

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

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

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

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

展望与下一步?

距离 Debezium 2.6 的最终版本发布仅剩几周时间。我预计本周晚些时候会发布 2.6.0.CR1 版本,下周某个时候发布 2.6.0.Final 版本,前提是没有出现任何意外问题。

在接下来的几周内,团队将开始将重点转移到 Debezium 2.7 的未来工作上。这将是 Debezium 2.x 系列的最后一个次要版本,其中将包括其他连接器的只读增量快照、一个新的专用 MariaDB 源连接器以及一个 MongoDB 宿连接器,仅举几项亮点。我们还将把 2.6 版本中仍在开发但未能包含进该版本的工作带过来。

最后,下半年的工作重点将是 Debezium 3,届时我们将迁移到 Java 17,开发新的时间序列源连接器,以及更多内容。请花点时间查看我们的 路线图。如果您有任何建议或想法,请随时在我们的 邮件列表 或我们的 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 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×