我很高兴地宣布 Debezium 2.6.2.Final 现已可用。此版本是第二个维护版本,侧重于解决 2.6.1.Final 版本的一些关键稳定性问题,支持 Oracle 数据库查询超过一千个表的过滤,修复了 PostgreSQL 偏移量刷新的竞争条件,修复了 Avro 兼容性,等等。

让我们花点时间深入了解这些以及更多内容……

新功能和改进

Debezium 2.6.2.Final 引入了一项新功能,让我们来看看。

Oracle 数据库查询过滤,支持 1000+ 表

Debezium Oracle 连接器允许配置表包含和排除列表,这些列表将作为数据库查询的一部分进行应用,以提高效率,使用 log.mining.query.filter.mode。当将此配置属性设置为 in 值时,查询将使用 SQL in-clause 构建。在 Oracle 中,in-clause 限制为一千个元素,如果连接器的配置超过此限制,查询将无法执行。

Debezium 2.6 通过创建恰好一千个元素的子存储桶来解决此问题,并通过多个 in-clauses 分隔符(如果表包含和排除列表太大)来构建查询。这改善了用户体验,允许单个连接器使用查询过滤器模式捕获超过一千张表,而无需使用正则表达式。(DBZ-7847)。

修复和稳定性改进

Debezium 2.6.2.Final 引入了多项新的 bug 修复和稳定性改进,让我们来看其中一些。

PostgreSQL 偏移量刷新竞态条件

Debezium PostgreSQL 连接器要求我们不仅要将偏移量元数据发布到 Kafka 以处理连接器重启,还必须将这些详细信息刷新到数据库的底层复制槽,以防止 WAL 无限增长。

以一个例子来说,假设我们有两个 LSN 12 的更改。这两个更改分别写入了两个不同的分区 AB。由于这是异步发生的,所以写入分区 B 可能会成功,而写入分区 A 可能会失败。

如果 Debezium 在收到分区 A 的确认之前收到了分区 B 的确认,连接器会将 WAL 已确认的 LSN 同步为 2。如果连接器在确认分区 A 之前失败或由于重新平衡而重新启动,连接器重启后,LSN 1 的更改将丢失。

这个问题已在 Debezium 2.6 及更高版本中修复,复制槽的已确认 LSN 将正确匹配主题中的状态(DBZ-7816)。

Avro 兼容性

在 Debezium 2.5 中,我们引入了几个新的时间戳字段 ts_usts_ns,它们表示微秒和纳秒的基于毫秒的时间值。不幸的是,这些字段的引入方式对于使用 Avro 的用户来说是不兼容的(DBZ-7880)。

我们调整了更改事件模式,使引入的新字段成为可选的,从而使更改事件模式与旧版本兼容,以便用户可以使用 Avro 无缝升级到 Debezium 2.6 或更高版本。

其他修复

  • 在 Debezium 首次部署后,如果向 MSSQL 添加了新表,其 schema 会被捕获 DBZ-7697

  • NO_DATA 快照模式验证在快照未完成时重试时抛出 DebeziumException DBZ-7780

  • DDL 语句无法解析 DBZ-7788

  • ibmi-connector 服务中的旧类引用 DBZ-7795

  • 临时阻塞快照在未在数据库中插入行的情况下无法通过文件通道工作。 DBZ-7806

  • Postgres:连接器重启时可能发生数据丢失 DBZ-7816

  • 向 JDBC sink 添加 c3p0 超时配置示例 DBZ-7822

  • Sql Server 错误地应用了带引号的快照语句覆盖 DBZ-7828

  • Debezium JDBC Sink 未正确处理顺序 DBZ-7830

  • 在 Cassandra 文档中,有一个拼写错误,应该是 disable 而不是 Dusable。 DBZ-7851

  • Debezium MySQL 快照连接器失败 DBZ-7858

  • 支持 Oracle DDL Alter Audit Policy DBZ-7864

  • 支持 Oracle DDL Create Audit Policy DBZ-7865

  • 错误重试的默认值未正确解释 DBZ-7870

  • Debezium 更新后日志过多 DBZ-7871

  • 从 Oracle Debezium 2.5.3.Final 升级到 2.6.1.Final 时的 Avro 模式兼容性问题 DBZ-7880

  • ParsingException (MySQL 8): create trigger if exists DBZ-7881

  • Debezium 无法处理名称中带有 # 的列 DBZ-7893

  • Oracle 间隔默认值未正确解析 DBZ-7898

总共有 20 个问题 在 Debezium 2.6.2.Final 中得到解决。更改列表也可以在我们的发行说明中找到。

非常感谢社区中辛勤工作的贡献者们,他们为这个版本付出了努力:Anil DasariChris CranfordDuc Le TuIlyas AhsanJiri PechanecJochen SchalandaMario Fiore VitaleMichal AugustýnPradeep NainRobert RoldanRobin MoffattRoman Kudryashov,以及 Vadzim Ramanenka

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