我很高兴地宣布 Debezium 2.7 的第一个维护版本,**2.7.1.Final**。此维护版本专注于解决许多稳定性问题,包括对临时快照的改进、嵌入式引擎中转换器的关闭、Oracle LogMiner 实现的改进、Vitess 的 epoch 计算等等……
让我们深入了解这些变化……
修复和稳定性改进
Debezium 2.7.1.Final 引入了几项新的错误修复和稳定性改进,让我们来看看其中几项。
Debezium 容器镜像现已包含 MariaDB
在 Debezium 2.7.0.Final 中,我们错误地遗漏了新的 Debezium for MariaDB 连接器,导致用户需要手动安装 MariaDB 连接器。此问题已修复,Debezium 2.7.1.Final 的容器镜像现在包含所有连接器,正如之前一样(DBZ-8008)。
支持 MariaDB RENAME TABLE
在 Debezium 2.7 版本中,随着 MariaDB 和 MySQL 分离成各自独特的连接器,它们也使用独特的语法来解析 SQL 语句。我们发现了一个回归问题,即新的 MariaDB 语法不支持 RENAME TABLE 的 SQL 语法(DBZ-8066)。此问题已修复,在 MySQL 和 MariaDB 中均完全支持。
JDBC sink 分区重新平衡已修复
在早期版本的 Debezium JDBC sink 中,用户可能会在连接器日志中注意到一些奇怪的消息,可能类似于以下输出:
Ignoring invalid task provided offset topicXYZ-1 OffsetAndMetadata{offset=4966, leaderEpoch=null, metadata=''} -- partition not assigned, assignment=[topicXYZ-1] (org.apache.kafka.connect.runtime.WorkerSinkTask:434) 感谢用户报告(DBZ-7946),我们发现 JDBC sink 连接器未能正确处理多个任务之间的分区重新平衡。此回归问题已在 **2.7.1.Final** 中修复,当发生分区重新平衡时,分区将被不再管理该分区的任务关闭;因此,上述消息将不再写入连接器日志。
临时快照改进
在 Debezium 2.7 版本中,用户可能注意到,如果选择了 insert_delete watermark 策略来处理信号表条目,连接器最终会因 StackOverflowError 而失败(DBZ-8011)。在 Debezium 2.7.1.Final 或更高版本中,此回归问题已修复,用户可以再次使用 insert_delete watermark 策略。
此外,还有用户报告称,发送包含与任何数据库表都不匹配的正则表达式的临时快照信号会导致临时快照进程因 `"Unexpected result ."` 错误而失败(DBZ-8050)。此问题也已修复,因此临时快照将优雅地跳过该信号,因为未找到匹配的表。
最后,还发现临时阻塞快照可能导致 CommunicationsException,这是由于初始和阻塞快照代码路径管理连接的方式所致(DBZ-8058)。通过让阻塞快照在需要时验证并重新打开连接,此问题已在 Debezium 2.7.1.Final 中得到修复。
嵌入式引擎现已关闭转换器
Debezium 团队最近发布了新的异步嵌入式引擎,并在后续版本中不断改进。作为我们持续改进的一部分,我们发现单消息转换器(single message transforms)的 close() 方法未被调用。这很容易导致资源泄漏,具体取决于转换器的功能。
此版本引入了一个修复程序,可自动关闭转换器以避免此问题(DBZ-8106)。
Oracle 连接器可能产生 NullPointerException
Debezium Oracle 连接器中添加了一项更改(DBZ-8055),旨在解决 Oracle LogMiner 和捕获更改的一些并发问题。不幸的是,该更改引入了一个极端情况,即连接器会重新计算上限挖掘范围,在这种情况下会导致 NullPointerException。
Debezium 2.7.1.Final 中包含了一个新的修复程序(DBZ-8119)来纠正此问题。建议 Oracle 连接器用户升级到 2.7.1.Final 并跳过 2.7.0.Final 以避免此回归。
Vitess epoch 计算已修复
我们发现了一些极端情况,即在事务 ID 不可用时,事务 epoch 值会被重置(DBZ-8087)。这是非预期的行为,因为事务 epoch 应该单调递增,重置为零破坏了这一预期。已添加修复程序以避免重置并恢复预期的事务 epoch 行为。
其他修复
-
记录新的 MariaDB 连接器 DBZ-7786
-
澄清 Oracle 连接器不从物理备用数据库读取 DBZ-7895
-
混合模式和 DDL 更改问题 DBZ-7991
-
生成的 offset/history 属性映射不正确 DBZ-8007
-
将 Infinispan 升级到 14.0.29.Final DBZ-8010
-
当 insert.mode 设置为 upsert 且 primary.key.mode 设置为 record_value 时,JDBC primary.key.fields 不能为空 DBZ-8018
-
无法获取 buffer 锁,buffer queue 可能已满 DBZ-8022
-
ORA-65090:在非 CDB 数据库上连接时,操作仅允许在容器数据库中 DBZ-8023
-
添加免责声明,说明 PostProcessors 和 CustomConverters 仅适用于 Debezium 源连接器 DBZ-8031
-
为 Prometheus JMX exporter 添加了类型 DBZ-8036
-
将
kafka.producer指标添加到 debezium-server jmx exporter 配置 DBZ-8037 -
Oracle 连接器在重做日志切换时出现不一致 DBZ-8055
-
Oracle 直方图指标不再正确打印在日志中 DBZ-8068
-
在混合 log.mining.strategy 重建中,日志应设置为 DEBUG DBZ-8070
-
支持在快照期间捕获 MySQL/MariaDB 的 BLOB 列类型 DBZ-8076
-
条件化 MySQL 默认值在
schema.history.internal.store.only.captured.databases.ddl描述中的引用 DBZ-8081 -
在将列数据类型从 int 更改为 float 后,Debezium 无法对其进行四舍五入,并且我在流中获得了此字段的 null 值 DBZ-8089
-
MySQL 和 MariaDB 关键字 YES 不能作为列名解析 DBZ-8092
-
更新第三方 LICENSE,MariaDB Connector/J 使用 LGPL DBZ-8099
-
NotificationIT 测试似乎由于相互干扰而失败 DBZ-8100
-
ORA-26928 - 无法与 XStream 协调进程通信,应可重试 DBZ-8102
-
Converters 文档使用错误的示例 DBZ-8104
-
从临时快照文档中删除对“additional condition”信号参数的引用 DBZ-8107
-
在 TimescaleDb SMT 中加载 timescale 元数据后不要关闭连接 DBZ-8109
-
主键更新/快照竞态条件 DBZ-8113
-
文档:connect-log4j.properties 而不是 log4j.properties DBZ-8117
-
TimescaleDbDatabaseTest.shouldTransformCompressedChunks 正在失败 DBZ-8123
-
更新 Oracle 连接器文档,介绍限制 Debezium LogMiner 用户访问权限的选项 DBZ-8124
非常感谢社区中为此版本辛勤付出的所有贡献者:Andreas Martens、Andrey Pustovetov、Anisha Mohanty、Bertrand Paquet、Chris Cranford、Christian Jacob Mencias、Duc Le Tu、Gaurav Miglani、Gunnar Morling、Harvey Yue、Henk van Dyk、Hossein Torabi、Inki Hwang、Jakub Cechacek、Jiri Pechanec、M. Gökhan Akgül、Mario Fiore Vitale、Michal Pioun、Mickael Maison、Minh Son Nguyen、Ondrej Babec、Ricardo Rosales、Robert Roldan、Roman Kudryashov、Ryan van Huuksloot、Seongjoon Jeong、Thomas Thornton、Hossein Torabi、Vadzim Ramanenka、Vojtech Juranek 和 Yanjie Wang!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。