Debezium 3.2.1.Final 现已发布,为您的 CDC 流水线带来更快的性能、更智能的资源利用和稳固的稳定性。此版本改进了 PostgreSQL TOAST 处理、原生 MariaDB 向量数据类型支持,以及 Oracle LogMiner 的主要弹性改进,所有这些都旨在保持您的数据平稳高效地流动。
在本文中,我们将深入探讨 Debezium 几个关键模块的性能改进,讨论任何新功能,并解释任何可能影响升级过程的更改。一如既往,我们建议您阅读 发布说明,以了解所有已修复的错误、更新步骤以及更多内容。
新功能和改进
以下描述了 Debezium 3.2.1.Final 中所有值得注意的新功能和改进。有关完整列表,请务必阅读 发布说明 以获取更多详细信息。
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 操作的事务发送 START、COMMIT 和 ROLLBACK 事件。换句话说,如果有人执行了 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 依赖项。 |
总结
非常感谢社区中所有辛勤工作的贡献者为这个版本付出的努力
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!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。