我很高兴地宣布 Debezium 2.7 版本流的第二个维护版本,即 2.7.2.Final。此维护版本侧重于解决稳定性和回归问题,并带来了一些改进,例如对 Informix 的 DECIMAL(p) 数据类型支持,以及修复了 JsonConverterTruncateColumn 处理器的回归。

让我们深入了解这些变化……

重大变更

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

Debezium Server Kafka 接收器

当 Kafka Broker 不可用时,Debezium Server Kafka 接收器适配器可能会无限期等待。适配器中新增了一个可配置的超时时间,以便在达到超时时间时强制适配器失败。新的选项 debezium.sink.kafka.wait.message.delivery.timeout.ms 默认值为 30 秒。如果默认值不能满足您的需求,请相应地进行调整(DBZ-7575)。

SQL Server

普通的 JMX 指标会使用 taskId 属性进行注册,因为 SQL Server 支持为每个数据库映射生成一个唯一的任务。然而,JMX 信号通道没有遵循这一点,导致为每个任务启动 JMX 信号通道时出现一些问题。现已修复此问题,JMX 信号通道的 MBean 名称现在在其名称中使用 taskId,以便在使用单个连接器从多个 SQL Server 数据库流式传输更改时唯一标识每个数据库任务的信号通道(DBZ-8137)。

新功能和改进

Debezium 2.7.2.Final 还引入了一些改进和新功能,让我们逐一查看。

Informix DECIMAL(p) 数据类型支持

Debezium for Informix 在 DECIMAL 数据类型方面进行了一些改进。该数据类型可以定义有或没有精度。当不定义精度时,连接器将列的类型解释为 DECIMAL(16)。但是,用户也可以将列定义为 DECIMAL(p,s),其中 p 的精度最高为 32,s 的精度是可变的。

为了使用 PRECISE 小数处理模式表示这些小数的上界,需要调整 Informix 连接器以利用 Debezium 的 VariableScaleDecimal 语义类型,这使得 Debezium 在序列化到 Kafka 消息时能够保留这些浮点数的完整精度(DBZ-8114)。

有关 DECIMAL(p,s) 数据类型如何序列化的更多信息,请参阅 Informix 文档

修复和稳定性改进

Debezium 2.7.2.Final 引入了多项错误修复和稳定性改进。

JsonConverter 现在会尊重列截断

在早期版本的 Debezium 中,column.truncate.* 功能会根据截断配置返回一个被切片的 ByteBuffer。虽然在使用 Avro 时这可以正常工作,但如果您的连接器配置使用了 JsonConverter,则不会考虑截断,因为它操作的是整个底层数组,而不是给定的 *切片*。

在 Debezium 2.7.2.Final 中,此问题已得到修复,列截断逻辑现在通过创建一个新的 ByteBuffer 来明确基于一个新数组。此更改允许 JsonConverter 在序列化到 Kafka 时尊重截断的列值(DBZ-8189)。

快照模式 schema_only_recovery 已回归

据报告,在 Debezium 2.7 中 schema_only_recovery 快照模式无法正常工作。我们已找出问题所在,并且 schema-only recovery 快照模式现在可以再次作为 Debezium 2.7 的可行选项。

温馨提示,schema_only_recoveryschema_only 在 Debezium 2.7 中已被弃用,并在 Debezium 3.0 中被移除。在从 Debezium 2.7 升级到 3.0 时,请务必分别使用 recoveryno_data 快照模式。

MariaDB 缺少 Debezium Server

其中一些用户可能已经注意到,随着 Debezium 2.7 中增加了新的官方 MariaDB 连接器,该连接器却在 Debezium Server 发行版中缺失。您将很高兴地知道,Debezium 2.7.2.Final 构建现在将在发行版中包含 MariaDB 连接器,因此您不再需要手动添加它。(DBZ-8186)。

Oracle VECSYS 表空间被标记为内置

如果您尝试在最新的 Oracle 23ai 镜像中使用 Debezium,您会注意到出现了一个名为 VECSYS 的新表空间。该表空间包含各种系统表,用于存储关于新的 Oracle 23 向量数据库和搜索功能的元数据。

我们发现用于捕获表 DDL 结构的 DBMS_METADATA.GET_DDL 函数与 VECSYS 表空间中的几个数据库对象不兼容,如果您不显式设置 schema.history.internal.store.only.captured.tables.ddltrue,将会导致连接器出现问题。为了解决这个问题,该表空间被标记为内置,这意味着它不再符合捕获条件(DBZ-8198)。

其他修复

  • 增量快照与 CloudEvent 转换器不兼容(DBZ-7601

  • 如果代理键不存在,增量快照会因 NPE 而失败(DBZ-7797

  • Postgres 连接器 - "money" 类型列的空值处理。(DBZ-8027

  • 在 Oracle 上使用 snapshot.include.collection.list 会引发 NullPointerException(DBZ-8032

  • 记录被放弃事务的附加详细信息(DBZ-8044

  • 重建时性能下降(log.mining.stragtegy hybrid mode)(DBZ-8071

  • 信号文档为某些连接器提供了错误的数据收集格式(DBZ-8090

  • ORA-00600:内部错误代码,参数:[krvrdGetUID:2],[18446744073709551614],[],[],[],[],[],[],[],[],[],[](DBZ-8125

  • ConvertingFailureIT#shouldFailConversionTimeTypeWithConnectModeWhenFailMode 随机失败(DBZ-8128

  • 插入期间表行顺序不可预测,导致外键错误(DBZ-8130

  • schema_only 导致 ibmi 连接器崩溃(DBZ-8131

  • 支持更大的 database.server.id 值 [DBZ-8134](https://issues.redhat.com/browse/DBZ-8134)

  • 为日志添加 LogMiner 启动挖掘会话重试计数器(DBZ-8143

  • 打开重做线程一致性检查可能导致 ORA-01291 - 缺少日志文件(DBZ-8144

  • 减少 XStream DML 事件数据的日志详细程度(DBZ-8148

  • 当停止 Oracle RAC 节点时,Debezium 服务器会抛出期望 - ORA-12514:无法连接到数据库并重试(DBZ-8149

  • Debezium 快照问题:使用插件 pgoutput 时出现 DateTimeParseException(DBZ-8150

  • 当使用 record_value 且没有 primary.key.fields 时,JDBC 连接器验证失败(DBZ-8151

  • 将 RAC 节点脱机再联机可能导致线程不一致(DBZ-8162

  • Postgres JSONB 字段不支持 Reselect Post Processor(DBZ-8168

  • 重启 Oracle 引擎时出现 NullPointerException(schemaUpdateCache 为 null)(DBZ-8187

  • XStream 在先前尝试失败后可能无法在重试时附加(DBZ-8188

  • 减少 OpenLogReplicator SCN 确认的日志详细程度(DBZ-8201

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

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