Debezium 3.2.1.Final 现已发布,为您的 CDC 流水线带来更快的性能、更智能的资源利用和稳固的稳定性。此版本改进了 PostgreSQL TOAST 处理、原生 MariaDB 向量数据类型支持,以及 Oracle LogMiner 的主要弹性改进,所有这些都旨在保持您的数据平稳高效地流动。

在本文中,我们将深入探讨 Debezium 几个关键模块的性能改进,讨论任何新功能,并解释任何可能影响升级过程的更改。一如既往,我们建议您阅读 发布说明,以了解所有已修复的错误、更新步骤以及更多内容。

新功能和改进

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

Debezium Core

Debezium for MariaDB

Debezium for PostgreSQL

Debezium for Oracle

Debezium Outbox for Quarkus

Debezium Core

禁用上下文头

在 Debezium 3.2.0.Final 中,我们引入了几个新的头信息,为 OpenLineage 提供上下文,这些头信息会自动添加到每个发出的事件中。一些用户对这些头信息被添加且无法禁用表示担忧,因为某些环境需要保持事件载荷尽可能精简。

根据社区反馈,我们引入了一个新的配置选项 extended.headers.enabled,可以将其设置为 false,从而禁用这些上下文事件头的添加 (DBZ-9248)。

Debezium for MariaDB

Vector 数据类型支持

MariaDB 11.7 引入了 VECTOR(n) 数据类型,允许将关系数据库中的值存储,就像它是一个向量数据库一样。通过此新数据类型,可以存储和搜索由 AI 模型生成的向量值。

Debezium 3.2 在 MariaDB 源连接器和 JDBC 接收连接器写入 MariaDB 目标数据库时引入了 MariaDB vector 数据类型支持(DBZ-8582)。

Debezium for PostgreSQL

改进的 TOAST 列性能

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

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

Debezium for Oracle

LogMiner 实验性 CTE 查询支持

我们为 Oracle LogMiner 引入了一项新的内部和实验性功能,该功能利用了 CTE 查询(或通用表表达式查询)的概念。CTE 查询是一种 SQL 构造,允许在另一个 SQL 操作的执行过程中定义一个临时的、命名的结果集,这在各种情况下都很有用。

对于 Debezium Oracle 连接器,新的 internal.log.mining.use.cte.query 功能会切换一个特殊的预处理步骤,该步骤会检查所有事务并执行预过滤步骤 (DBZ-9272)。此过滤步骤旨在仅为包含至少一个已捕获表 DML 操作的事务发送 STARTCOMMITROLLBACK 事件。换句话说,如果有人执行了 100 个事务,而其中只有一个事务修改了您捕获的表,那么我们不仅不会收到其他 99 个事务的 DML 事件,而且事务标记也会被省略。

此功能并非没有缺点,最显著的是它需要对事务日志进行两次扫描。对于非捕获表与捕获表之间更改量不成比例地更高的系统,额外的读取传递可能值得,以最小化额外事务标记事件的网络和连接器处理开销。

指标现在跟踪缓存的事务事件数量

当使用 LogMiner 连接适配器在其默认配置中时,Debezium Oracle 连接器会在内存中缓冲事务。虽然现有的 NumberOfActiveTransactions JMX 指标可让您查看当前有多少事务处于打开状态,但它无法显示有多少单个事务事件正在被缓存——这是连接器内存使用量的主要驱动因素。

为了解决这个问题,我们引入了一个新的 JMX 指标 NumberOfEventsInBuffer,在使用缓冲的 LogMiner 适配器时可用(DBZ-8991)。此指标报告当前事务缓冲区中持有的事务事件总数,让您更深入地了解连接器的内存占用情况,并帮助您更好地监控和调整性能。

日志挖掘不再因 ORA-00310 错误而失败

在启动 Oracle LogMiner 会话时,如果在线重做日志在日志收集进行挖掘时刚好过渡到归档状态,可能会发生 ORA-00310 错误。在之前的版本中,这种情况通常需要连接器停止并重新启动,前提是运行时已启用了错误重试。

为了提高性能和弹性,我们已更新连接器,将 ORA-00310 视为日志不一致条件(DBZ-8870)。发生这种情况时,连接器现在会重新收集日志列表并重新验证日志一致性,而不是立即将异常传播到运行时。此更改利用了现有的日志一致性重试机制,避免了不必要的连接器重启。

数据库心跳不再因 ORA-02396 错误而失败

当 Oracle 连接器配置为使用 heartbeat.action.query 属性执行数据库级别心跳时,如果一批更改花费的时间超过了会话允许的空闲超时时间,则可能发生 ORA-02396 异常。在这种情况下,当下一个心跳查询执行时,空闲会话超时会导致连接失败,从而导致连接器停止并触发重启——这是一个低效且不必要的干扰。

从 Debezium 3.2.1 开始,心跳操作查询处理程序现在对空闲会话超时具有弹性。ORA-02396 异常将不再导致连接器停止并依赖运行时重新启动它(DBZ-9280)。此增强功能提高了连接器在可能导致超时的长事务批次环境中运行时的效率和稳定性。

Debezium Outbox for Quarkus

Quarkus 3.24.x 和 Hibernate 7.x 支持

Quarkus 3.24 及更高版本现在随 Hibernate 7+ 持久化框架一起发布。此 Hibernate 升级引入了一个中断性更改,影响了在 Quarkus 3.24 或更高版本上运行时与 Debezium Outbox 扩展的兼容性。

从 Debezium 3.2.1.Final 开始,Outbox 扩展包含了必要的更新,以恢复与最新 Quarkus 版本的兼容性(DBZ-9219)。

如果使用 Quarkus 3.23 或更早版本,则必须使用 Debezium 3.2.0.Final 或更早版本。建议如果您使用 Debezium 3.2.1.Final 或更高版本,则必须使用 Quarkus 3.24 或更高版本,其中包括最新的 Hibernate 7.x 依赖项。

总结

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

非常感谢社区中所有辛勤工作的贡献者为这个版本付出的努力
Aleksei Silantev, Animesh Kumar, Anisha Mohanty, Chris Cranford, Jiri Pechanec, Jona J, Lars M. Johansson, Mario Fiore Vitale, Pranav Tiwari, Robert Roldan, Shubham Kalla, and Vojtech Juranek

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