我很高兴地宣布 Debezium 2.7 版本流的第二个维护版本,即 2.7.2.Final。此维护版本侧重于解决稳定性和回归问题,并带来了一些改进,例如对 Informix 的 DECIMAL(p) 数据类型支持,以及修复了 JsonConverter 和 TruncateColumn 处理器的回归。
让我们深入了解这些变化……
重大变更
团队致力于避免次要版本之间出现任何潜在的破坏性更改;但是,此类更改有时是不可避免的。
- 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 的可行选项。
| 温馨提示, |
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.ddl 为 true,将会导致连接器出现问题。为了解决这个问题,该表空间被标记为内置,这意味着它不再符合捕获条件(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)
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。